SSH 会话丢失 - 命令是否继续执行?

Mik*_*iko 33 ssh

如果我在断开 SSH 连接之前正在运行命令,该命令会继续执行吗?

War*_*ner 32

在大多数情况下,没有。进程将在终端丢失时发送 SIGHUP。您可以在命令前加上 'nohup' 来忽略信号。看:

http://en.wikipedia.org/wiki/Nohup


gee*_*ier 23

我将在线程中添加另一个有用的建议,这是我几分钟前刚刚学到的:

如果你已经启动了一个需要很长时间的进程(在我的例子中是 tar restore),并且忘记在它前面包含 nohup,你仍然可以防止它在注销时终止。

以下是步骤:

  1. Ctrl + Z - 这将暂停作业
  2. 输入disown -h %x,其中x是您在暂停作业后获得的作业编号
  3. 执行bg将作业置于后台
  4. 退出外壳,继续你的生活:)。

  • +1,但是我发现在linux上的bash下不需要`disown`命令。我只需要 bg 作业,然后注销,作业就会继续运行。 (2认同)

mfi*_*nni 7

不是一般的,虽然不知道你正在运行什么外壳甚至什么操作系统,但很难说。例如,如果您在屏幕下运行它,我认为行为是分离并继续运行。也许其他一些 shell 将其作为可配置选项。


Dav*_*ney 7

正如上面 Warner 所说,ssh 守护进程的子进程(即登录 shell 和它的子进程)将得到SIGHUP,但它们不会立即得到它们。在服务器端的 ssh 守护程序放弃您的连接之前,有时会延迟几分钟。在此期间,该过程将继续运行。

正如 Warner 还说的,进程可以选择 ignore SIGHUP,在这种情况下,它将继续运行,直到它必须请求输入,然后 findSTDIN关闭。