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

MHi*_*bin 8 linux bash

我有一个 AWS 实例,在那里我需要完成一些需要一些时间的任务。

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

还是会随着我的会话关闭而停止?

all*_*tic 12

退出 ssh 会话后,仅将其置于后台不会使其留在后台。

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

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

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

另请参阅此问题,它基本上是完全重复的,但在ServerFault 上

  • 也值得一看`disown` (4认同)