所以,说我从一个SSH会话断开连接,我已经开始之后rsync
或cp
或其他任何命令,可以是长期运行。在我断开连接后,该命令会一直运行直到完成还是只是被杀死?
一直想知道这个。
在与同事长时间讨论后提出这个问题,我真的很想在这里澄清一下。
我启动了一个后台进程,通过将“ &
”附加到命令行或通过CTRL-Z
使用“ bg
”停止并在后台恢复它。然后我退出。
发生什么了?
我们很确定它应该被 SIGHUP 杀死,但这并没有发生;再次登录后,该进程愉快地运行并pstree
显示它已被“采用”init
.
这是预期的行为吗?
但是,如果是,那么nohup
命令的目的是什么?看起来这个过程无论如何都不会被杀死,不管有没有它......
更多细节:
nohup
和/或的情况下启动的&
;然后它被暂停CTRL-Z
并在后台恢复bg
。exit
”命令)。scp
文件复制操作。pstree
显示进程正在运行并且是init
.更清楚地说明问题:是否将进程置于后台(使用&
或bg
)使其 ignore SIGHUP
,就像nohup
命令一样?
我尝试手动发送一个SIGHUP
to scp
: 它退出了,所以它绝对不会忽略信号。
然后我再次尝试启动它,将它放在后台并注销:它被“采用”init
并继续运行,当我重新登录时我在那里找到了它。
我现在很困惑。看起来SIGHUP
在注销时根本没有发送。