Nohup对Nohup&

问题描述 投票:0回答:2

我无法理解使用nohup运行脚本和使用nohup和'&'之间的区别。我明白,对于后者,如果我想要杀死它,我可以杀死进程ID。但对于前者,我可以点击“CTRL + C”来杀死脚本。所以,如果我要运行以下命令

nohup sh script.sh

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

linux shell nohup
2个回答
2
投票

如果你能理解发生了什么会更好。

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 &在后台运行sh。如果您发送INT信号,该过程仍将终止,只是CTRL+C不会将其发送到此过程。你可以使用kill命令发送它。当终端存在时,命令仍将终止,即。当过程收到HUP信号。

因此,运行nohup sh script.sh &将在后台运行该进程并忽略终端存在时发送的信号。但它仍将在接收INT信号时终止。只需按下终端中的CTRL+C就不会将其发送到此进程,因为shell将术语信号发送到前台进程,而不是后台进程。


-1
投票

是。 &的优点是你不必按Ctrl + C参见例如https://www.computerhope.com/unix/unohup.htm

© www.soinside.com 2019 - 2024. All rights reserved.