SSH 会话关闭后,后台运行的作业是否会继续运行?

SSH 会话关闭后,后台运行的作业是否会继续运行?

我有一个 AWS 实例,我需要完成一些任务,这需要一些时间。

如果我在上下班途中运行这些程序(例如wget <someStuff>),然后将其提交到后台CtrlZ»bg以检查它是否正常启动),然后退出我的 SSH 会话,wget 命令会在后台继续执行吗?

或者它会随着我的会话关闭而停止吗?

答案1

仅将其置于后台不会导致它在您退出 ssh 会话后仍留在后台。

在后台运行它只是将stdin管道与控制台分离。该过程仍然是孩子shell 进程,例如bash。Linux/UNIX 上的标准程序是,正常终止父 shell 进程会导致所有子进程收到信号SIGHUP。几乎所有标准进程都会将该信号处理为终止进程的请求,尽管进程忽略 SIGHUP 信号并继续运行。它也可以做一些完全不同的事情,比如打开你的微波炉,或者让月球车钻入地面,或者启动你的汽车,或者删除系统上的所有文件。这是一个信号,这意味着它只是发送给进程的一种建议命令。进程可以用它做任何想做的事情。

您需要了解的是:由于处理 SIGHUP 相当于说“请立即终止您的程序”,因此某些程序很容易忽略该“好请求”并继续运行。因此,有几个专门设计的程序允许进程在 shell 终止后继续运行。顺便说一句,当您的 SSH 连接断开时,shell 进程作为您注销序列的一部分终止。

GNUscreen就是这样一个命令;nohup是另一个。screen总体上更灵活,对于这个特定任务非常有用。bg并不合适,因为如果子进程没有被包装在旨在忽略 SIGHUP 的进程中,例如,它将“尊重” SIGHUP。screennohup最基本的 SIGHUP 忽略进程,因为除了将子进程的输出写入文件之外,这基本上是它的唯一功能。

另请参见这个问题,它基本上是完全重复的,但是在服务器故障

答案2

如果您关闭 SSH 会话,Wget 会自动在后台继续运行,无需采取任何进一步的操作。它甚至会创建一个wget-log文件,就像您使用-b开关启动它一样。

一般来说,当您关闭 SSH 会话时,已停止或处于后台的程序将退出。

相关内容