Nohup 对比 Nohup &

Nohup vs Nohup &

我无法理解仅对 运行 脚本使用 nohup 与使用 nohup 和“&”之间的区别。我理解,对于后者,如果我想杀死它,我可以杀死进程id。但是对于前者,我是否可以直接点击 "CTRL+C" 来杀死脚本。所以如果我要 运行 下面的命令

nohup sh script.sh

然后通过点击 "CTRL+C" 退出它,该脚本是否仍然是 运行ning?

是的。 & 的优点是您不必按 Ctrl+C 例如参见 [​​=10=]

如果你能明白是怎么回事就更好了。

nohup 设置忽略 HUP 信号的过程。就这样。仅此而已。进程何时收到 HUP 信号?通常在终端注销时。 HUP 信号的默认操作是终止。

hitting "CTRL+C" 只是向进程发送 INT 信号。默认操作(您也可以 trap "echo something" INT 覆盖它)是终止进程。

nohup sh script.sh 在收到 INT 信号后将终止(假设 script.sh 没有专门处理 INT 信号)因为它没有设置自定义操作在收到 INT 信号时,它将忽略 HUP 信号。

& 放在命令后 运行 将其置于后台。作为一个单独的过程。所以 sh script.sh & 运行s sh 在后台。如果您向它发送 INT 信号,该进程仍将终止,只是 CTRL+C 不会将其发送到 那个 进程,而是发送到前台处理。您仍然可以使用 kill 命令发送它。当终端退出时,当进程收到 HUP 信号时,命令仍将终止。

所以 运行ning nohup sh script.sh & 将 运行 后台进程并忽略终端退出时发送的信号。但它仍然会在收到 INT 信号时终止。仅在终端中按 CTRL+C 不会将其发送到此进程,因为 shell 将术语信号发送到前台进程,而不是后台进程。