我很难理解使用nohup运行脚本与使用nohup和'&‘之间的区别。我明白,对于后者,如果我想杀死它,我可以直接杀死进程id。但是对于前者,我是否可以点击"CTRL+C“来删除脚本。所以如果我要运行以下命令
nohup script.sh
然后点击"CTRL+C“退出,该脚本是否仍在运行?
发布于 2019-03-11 20:55:39
如果你能明白这是怎么回事会更好。
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将术语信号发送给前台进程,而不是后台进程。
发布于 2019-03-11 20:49:20
是。-的优点是您不必按Ctrl+C,例如,https://www.computerhope.com/unix/unohup.htm
https://stackoverflow.com/questions/55110150
复制相似问题