我无法理解仅使用 nohup 运行脚本与使用 nohup 和“&”之间的区别。我理解,对于后者,如果我想杀死它,我可以杀死进程id。但是对于前者,我可以直接按“CTRL+C”来杀死脚本吗?所以如果我要运行下面的命令
nohup sh script.sh
然后按“CTRL+C”退出它,该脚本是否仍在运行?
最佳答案
如果你能理解发生了什么就更好了。
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
不会将其发送到 that 进程,而是处理它在前景中。您仍然可以使用 kill
命令发送它。当终端退出时,当进程收到 HUP
信号时,命令仍将终止。
因此运行 nohup sh script.sh &
将在后台运行进程并忽略终端退出时发送的信号。但它仍然会在接收到 INT
信号时终止。仅在终端中按 CTRL+C
不会将其发送到此进程,因为 shell 将术语信号发送到前台进程,而不是后台进程。
关于linux - Nohup 对比 Nohup &,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55110150/