两者nohup myprocess.out &或myprocess.out &将myprocess.out设置为在后台运行。关闭终端后,该过程仍在运行。它们之间有什么区别?
nohup myprocess.out &
myprocess.out &
nohup捕获挂断信号(请参阅参考资料man 7 signal),而&则不捕获(除非shell以这种方式配置或根本不发送SIGHUP)。
nohup
man 7 signal
SIGHUP
通常,当使用此命令运行&并退出Shell之后,Shell将以挂断信号(kill-SIGHUP<pid>)终止子命令。可以使用来防止这种情况nohup,因为它会捕获信号并忽略该信号,因此它永远不会到达实际应用程序。
&
kill-SIGHUP<pid>
如果您使用的是bash,则可以使用命令shopt|grephupon来查找shell是否将SIGHUP发送到其子进程。如果关闭,进程将不会终止,这对您来说似乎就是这种情况。。
shopt|grephupon