返回
后台进程管理:nohup 与 &,关键差异详解
Linux
2024-03-18 03:30:32
后台进程管理:nohup vs. &
在 Linux 系统中,后台进程 是一种在用户注销或关闭终端后仍能继续运行的进程。管理后台进程的常用方法包括 nohup
和 &
,但它们存在着一些关键差异。
nohup vs. & :关键差异
标准输出和错误处理
- & (后台运行) :使用
&
运行进程时,标准输出和错误输出将重定向到/dev/null
,即丢弃。 - nohup (无挂断) :使用
nohup
运行进程时,标准输出和错误输出将重定向到指定的日志文件(默认为nohup.out
),否则重定向到标准输出。
作业控制
- & (后台运行) :使用
&
运行的进程成为子进程,受父 shell 控制,可以通过jobs
和kill
命令管理。 - nohup (无挂断) :使用
nohup
运行的进程成为独立进程,不受父 shell 控制,需要使用pgrep
或pkill
等工具管理。
信号处理
- & (后台运行) :继承父 shell 的信号处理设置,如果父 shell 接收到中止信号,子进程也会收到并终止。
- nohup (无挂断) :忽略
SIGHUP
信号,即使父 shell 终止,进程仍继续运行。
使用场景
- 使用 & :不关心输出,需要在后台运行长时间任务(如计算或下载)。
- 使用 nohup :需要记录输出,在后台运行日志记录或数据收集脚本。
示例
- 使用 & 运行命令在后台运行:
$ myprocess.out &
- 使用 nohup 运行命令在后台运行并记录输出:
$ nohup myprocess.out > myprocess.log &
结论
nohup
和 &
都是管理后台进程的有效工具,但根据不同的输出处理、作业控制和信号处理需求选择合适的工具非常重要。
常见问题解答
Q1:为什么使用 nohup
而不使用 &
?
A1:当需要记录进程输出时,使用 nohup
。
Q2:如何查看 nohup
进程的日志输出?
A2:使用 cat nohup.out
命令。
Q3:如何终止 nohup
进程?
A3:使用 pkill -f myprocess.out
或 pgrep -f myprocess.out | xargs kill -9
命令。
Q4:nohup
和 screen
有什么区别?
A4:screen
是一种终端多路复用器,允许在多个虚拟终端之间切换,而 nohup
用于管理后台进程。
Q5:nohup
是否可以防止进程被 SIGKILL 信号终止?
A5:否,SIGKILL 信号无法被阻止。