Nohup和Nohup&的区别

7
我不确定只使用 nohup 命令和同时使用 nohup 和 '&' 的区别。对于后者,如果我想杀掉它,我只需要杀掉进程ID。但是对于前者,我是否可以通过按“CTRL+C” 来终止该脚本。所以,如果我运行以下命令:

nohup sh script.sh

然后通过按“CTRL+C”退出,该脚本是否仍在运行?

2个回答

18

如果你了解正在发生的事情,那将会更好。

nohup 设置进程忽略 HUP 信号。仅此而已,没有多余的东西。进程接收到什么时候会收到 HUP 信号呢?通常是在终端注销时。默认情况下,HUP 信号是终止进程。

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

nohup sh script.sh 接收到 INT 信号时将终止(假设 script.sh 没有特殊处理 INT 信号),因为它没有设置在接收 INT 信号时的自定义操作,并且会忽略 HUP 信号。

& 放置在命令之后,将在后台运行它作为一个独立的进程。因此,sh script.sh & 在后台运行 sh。如果你向它发送 INT 信号,进程仍将终止,只是 CTRL+C 不会将其发送给 那个 进程,而是会发送给前台进程。您仍然可以使用 kill 命令来发送信号。当终端接收到 HUP 信号时,命令也将继续终止。

运行 nohup sh script.sh & 命令可以在后台运行进程,并忽略终端退出时发送的信号。但是,该进程仍会在接收到 INT 信号时终止。在终端中按下 CTRL+C 不会将其发送到此进程,因为 shell 发送终止信号给前台进程而不是后台进程。


-1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接