我不确定只使用 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
不会将其发送给 那个 进程,而是会发送给前台进程。您仍然可以使用 kill
命令来发送信号。当终端接收到 HUP
信号时,命令也将继续终止。
运行 nohup sh script.sh &
命令可以在后台运行进程,并忽略终端退出时发送的信号。但是,该进程仍会在接收到 INT
信号时终止。在终端中按下 CTRL+C
不会将其发送到此进程,因为 shell 发送终止信号给前台进程而不是后台进程。