linux - Nohup 对比 Nohup &

标签 linux shell nohup

我无法理解仅使用 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/

相关文章:

linux - Linux 上的软件声音消除(破坏性干扰)工具?

Bash 逐行读取文本文件并触发 logger 将该行记录到 var/log

command-line - 命令后忘记使用 &,需要将进程发送到后台

node.js - 无法让node.js服务器与forever/pm2/nohup一起运行

linux - 运行进程nohup

linux - Ubuntu 中的 chmod 命令可以从命令行运行,但不能从 bash 脚本运行

c# - java/C#.NET在windows上执行linux操作

linux - 确定另一个程序的工作目录

linux - 如何防止其他帐户(包括root)进入我的Linux目录?

linux - 案例陈述在我的 shell 脚本中不起作用