在与同事长时间讨论之后问这个问题,我真的很想在此澄清一下。
我启动了后台进程,方法是将“ &
” 添加到命令行,或者通过将其停止CTRL-Z
并以“ bg
” 在后台恢复。然后我注销。
怎么了?
我们非常确定它应该被SIGHUP杀死,但这没有发生。再次登录后,该进程愉快地运行,并pstree
显示出该进程已被采纳init
。
这是预期的行为吗?
但是,如果是的话,该nohup
命令的目的是什么?看起来无论有没有这个过程,进程都不会被杀死……
编辑1
一些更多的细节:
- 该命令是从SSH会话而不是从物理控制台启动的。
- 该命令在没有
nohup
和/或&
;的情况下启动。然后将其CTRL-Z
与暂停,并在与一起恢复后台bg
。 - ssh会话没有删除。实际注销(“
exit
”命令)。 - 该过程是
scp
文件复制操作。 - 再次登录后,
pstree
显示进程正在运行并且是的子进程init
。
编辑2
为了更清楚地说明问题:将进程置于后台(使用&
或bg
)使其SIGHUP
像nohup
命令一样被忽略吗?
编辑3
我尝试手动发送一个SIGHUP
to scp
:它退出了,所以它绝对不会忽略该信号。
然后,我再次尝试启动它,将其置于后台并注销:它被“采纳” init
并保持运行,并且重新登录后在此找到了它。
我现在很困惑。好像没有SIGHUP
发出任何注销消息。
1>/dev/null 2>&1
了,例如重击等等?