这个问题已经拿出了相当 一个 不少(真的 很多),但我发现答案是一般不完整。一般的问题是“为什么我退出/杀死ssh时为什么/不杀死我的工作?”,这就是我所发现的。第一个问题是:以下信息的一般性如何?对于现代Debian linux,以下内容似乎是正确的,但我缺少一些内容;别人需要知道什么?
只有在
huponexit
设置了该选项的情况下,关闭ssh连接时,所有通过ssh连接打开或未通过壳打开的Shell子进程都会被SIGHUP杀死:运行shopt huponexit
以查看是否为真。如果
huponexit
为true,则可以使用nohup
或disown
将该进程与Shell分离,以使它在退出时不会被杀死。或者,使用运行screen
。如果
huponexit
为false(这是最近至少在某些Linux上的默认设置),则后台注销的作业不会在正常注销时被杀死。但是,即使它
huponexit
为false,如果ssh连接被终止或断开(不同于正常注销),则后台进程仍将被终止。可以通过disown
或nohup
如(2)中那样避免。(a)父进程为终端的进程与(b)将stdin,stdout或stderr 连接到终端的进程之间存在一些区别。我不知道(a)而不是(b)的过程会发生什么,反之亦然。
最后一个问题:如何避免行为(3)?换句话说,默认情况下,在Debian中,后台进程会在注销后自行运行,而不是在ssh连接被终止后运行。无论连接是正常关闭还是终止,我都希望进程发生同样的事情。还是,这是个坏主意?
编辑:保持工作被杀死的另一种重要方法,在两种情况下都可行(?)是通过screen运行它们。但是,问题更多是关于了解何时杀死事物以及何时杀死事物:例如,有时人们希望在注销时杀死工作。
多个线程: - 对信号(SIGHUP),作业和控制终端澄清 - https://serverfault.com/questions/117152/do-background-processes-get-a-sighup-when-logging-off - 继续SSH关闭SSH时的后台任务/作业 - 关闭SSH会话后,置于后台的作业会继续运行吗? - 防止关闭SSH客户端后停止正在运行的后台进程 - 如何通过SSH启动进程,以便在断开连接后继续运行? - 无法使远程作业在OS X上运行 - 关闭SSH连接