COMMAND &
形式
- 前台进程变为后台进程。
- 如果不指定输出重定向(例如:
COMMAND >out.log 2>&1 &
),输出仍然打印到前台。 - 退出 shell 会话(其父进程),进程会收到
HUP
信号,从而退出。 - 在另一个 shell 会话向进程发送
INT
信号,进程会退出。
总结:COMMAND &
形式仅仅将前台进程放在后台运行,但进程输出仍打印在前台。并且,进程不会忽略任何信号。
nohup COMMAND
形式
- 前台进程不会变为后台进程。
- 如果不指定输出重定向(例如:
nohup COMMAND >out.log 2>&1
), 那么标准输出和标准错误都定向到了nohup.out
文件中。 - 退出 shell 会话(其父进程),进程会收到
HUP
信号,但进程免疫HUP
信号,不会退出。 - 在进程前台按 Ctrl + C,或者在另一个 shell 会话向进程发送
INT
信号,进程会退出。
总结:nohup COMMAND
形式仅仅使前台程序忽略 HUP
信号(退出 shell 时进程不会退出),并使进程标准输出和标准错误重定向到 nohup.out
文件。
nohup COMMAND &
形式
上述两种使用形式都不太能满足作为后台进程运行的需求,所以 nohup
与 &
往往结合使用(nohup COMMAND &
),其效果是:
- 进程在后台运行。
- 进程标准输出和标准错误定向到
nohup.out
文件。 - 进程会忽略
HUP
信号,因此退出 shell 会话时,也不会退出。
另外,若想将进程输出定向到其他文件,则可以使用 nohup COMMAND >/path/to/file 2>&1 &
。如果想忽略进程的输出,则可以使用 nohup bin >/dev/null 2>&1 &
。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。