Linux nohup命令和后台运行符&的使用

本文介绍了Linux中nohup命令和后台运行符&的使用,nohup允许脚本在终端关闭后继续执行,输出重定向到nohup.out,而&则使命令在后台运行,不影响后续操作。总结了两者的区别和组合使用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.nohup 的使用

作用:当你在终端执行命令脚本,当脚本没有执行完,如果你关闭终端,那么跟随这个终端有关的进程都会退出执行,nohup 命令的作用就是让使用此命令的脚本可以脱离终端继续执行,不受终端退出的影响。

命令
nohup bash shell_script.sh
nohup ./shell_script.sh

示例脚本:shell_script.sh
打印1-20的整数,打印时间间隔为1s

#!/bin/bash
for t in {1..20}
do
  sleep 1
  echo $t
done

执行:
执行
使用nohup命令执行脚本后你会发现,此时终端处于不可交互状态(不能输入命令),要等待脚本执行完才会切换为可交互。此时终端不会有打印,打印被追加重定向到脚本所在目录的nohup.out中去了(如果在此目录下使用nohup命令执行多个脚本,则nohup.out打屏日志会出现重叠,建议相同目录执行多个脚本的时候自己重定向,之后可以关闭终端,查看打屏输出可以另外开启终端执行:tail -f nohup.out)。在此时终端ctrl+c,可停止进程,如果关闭终端,则此脚本会继续执行直至结束。

关闭终端后执行结果的输出:脚本执行完毕
在这里插入图片描述
在同一个目录使用nohup执行多个脚本:nohup.out输出重叠
在这里插入图片描述

2.后台运行符 &的使用

作用:在终端执行命令时,以后台进程来执行脚本或者命令,不会影响你接下去的命令输入执行

命令
bash shell_script.sh &
./shell_script.sh &

示例脚本:shell_script2.sh

#!/bin/bash
for t in {1..20}
do
  sleep 1
  echo $t
done > result.txt

执行:
在这里插入图片描述
可以看到在执行命令:bash shell_script2.sh & 后终端还是可以交互输入的。并没有等到脚本执行完才能输入。返回的4480是后台运行脚本的进程号。终止此进程可以使用kill -9 4480 如果你在后台4480进程没有执行完前关闭此终端,则此进程会结束。这个就是和nohup命令不同的地方。

3.总结

在实际使用的过程中两个集合使用更加方便: nohup bash shell_script.sh &
当你在使用xshell 或者MobaXterm等终端模拟软件打开多个终端执行命令的时候就可以使用上述的命令,这样就不会有N个窗口打开着挂载着任务了,眼不见心不烦

### Linux使用nohup命令后台运行jar包的方法 在Linux系统中,`nohup` 命令可以用于将程序以后台方式运行,并忽略挂起信号(SIGHUP),从而确保即使关闭终端或SSH连接,程序仍然能够继续执行[^2]。以下是具体的命令示例用法说明: #### 基本命令格式 ```bash nohup java -jar demo.jar > nohup.log & ``` 上述命令中: - `nohup`:使程序忽略挂起信号。 - `java -jar demo.jar`:运行指定的JAR包程序。 - `> nohup.log`:将程序的标准输出重定向到 `nohup.log` 文件中。 - `&`:将命令放入后台执行。 #### 输出日志的处理 如果需要将标准错误输出也重定向到同一文件中,可以使用以下命令: ```bash nohup java -jar demo.jar > log.log 2>&1 & ``` 此命令中,`2>&1` 表示将标准错误输出(文件描述2)重定向到标准输出(文件描述1),最终所有输出都会写入 `log.log` 文件[^3]。 #### 使用绝对路径 为了确保命令在任意工作目录下都能正确执行,建议使用绝对路径指定JAR包日志文件的位置: ```bash nohup java -jar /export/server/jar/test.jar > /export/server/jar/testlog.log 2>&1 & ``` 通过这种方式,可以明确指定JAR包日志文件的具体位置,避免因当前工作目录不同而导致的问题[^4]。 #### 查看程序运行状态 运行程序后,可以使用以下命令查看日志文件的内容: ```bash tail -f /export/server/jar/testlog.log ``` `tail -f` 命令会实时显示日志文件的新增内容,便于监控程序运行状态。 #### 停止后台运行的程序 若需要停止由 `nohup` 启动的程序,可以先找到其进程ID(PID),然后使用 `kill` 命令终止: 1. 查找进程ID: ```bash ps aux | grep demo.jar ``` 2. 终止进程: ```bash kill -9 <PID> ``` ### 注意事项 - 如果未指定输出文件,默认情况下,`nohup` 会将输出重定向到当前目录下的 `nohup.out` 文件中。 - 确保日志文件所在的目录具有写权限,否则可能会导致日志记录失败。 - 在Windows系统上运行JAR包时,可以直接双击文件启动,而在Linux系统中则推荐使用 `nohup` 或其他类似工具。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值