这是一个已经多次解决的问题,不仅在这里,而且在堆栈交换网络的其他站点中也是如此(例如,当我中断 ssh 本身时,如何使 ssh 杀死远程进程? )。但是,我无法让任何解决方案对我有用。
我正在通过 ssh 运行命令。每当我退出 ssh 时,我都希望命令也终止。此命令是一个名为 ktserver 的守护进程,它会无限期地运行,直到您按下 Ctrl-C。
我按如下方式运行它:ssh -t compute-0-1 ktserver
实际上,当我按 Ctrl-C 时,该过程会正常结束并且 ssh 会话结束。
但是,如果我没有按 Ctrl-C,而是使用kill
命令终止 ssh 进程(例如,发送 SIGINT 或 SIGHUP),该ktserver
进程将保持活动状态。
我怎样才能使ktserver
总是死亡独立于如何ssh
被杀死?
编辑:如果,而不是ktserver
我运行完全不同的东西,例如gedit
,一切都像魅力一样(即 gedit 在连接终止时终止)。因此,过程本身可能有问题。例如,我认为它可能会忽略 SIGHUP 或 SIGINT。但是,当我运行kill -1 ktserver
or 时kill -2 ktserver
,进程会按预期终止。
EDIT2:正如 Mark Plotnick 指出的那样,该问题与 ssh 通道上没有通信流通这一事实有关。之后我通过运行ssh -t <host> read
并终止 ssh 进程来确认。read
还活着,还在踢。