为什么我的远程进程在杀死ssh会话后仍然运行?


15

我通过在本地shell中运行此命令来拖尾远程日志文件:

ssh remotemachine tail -100f /path/to/error_file

当我按照这个命令ctrl-c时,似乎ctrl-c杀死了本地ssh进程并让我的尾巴在远程机器上运行。我的印象是打破连接会发送一个挂断信号(因为我没有使用nohup)并杀死进程,但事实显然并非如此。

什么时候可以更多地了解挂断信号何时被发送以及什么时候不发送?远程机器是Ubuntu,如果其中任何一个产生影响,我的本地shell就是OS X bash。

Answers:


13

此行为源于缺少运行进程的控制终端。当远程进程没有控制终端时,处理会话的远程ssh进程无法终止命令,该命令将挂在僵尸状态,最终由init清除。

您可以通过使用-t选项运行它来解决这个问题,这使它成为一个控制终端。当您远程控制ssh命令时,这将导致进程终止。

-t 选项:

强制伪tty分配。这可以用来执行任意的   基于屏幕   远程程序                机器,这可能非常有用,例如实施时   菜单服务。多个-t选项   强迫tty                分配,即使ssh没有本地tty。

看一下 男人ssh 男人sshd 当你使用这个选项时,因为有一个控制终端的其他含义,例如发送转义字符的能力。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.