这个问题不仅在这里而且还在堆栈交换网络的其他站点中都已多次解决(例如,当我中断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
或时kill -2 ktserver
,该过程按预期方式终止。
编辑2:正如Mark Plotnick所指出的那样,问题与ssh通道上没有通信流通这一事实有关。我已经通过运行ssh -t <host> read
并终止ssh进程来确认。read
还活着,踢着。
ssh example.com dd ...
即使在ssh
连接断开后的几个小时,我的工作也已完成。如果您可以更改ktserver
以选择不定期输出某些内容,则可能是一种解决方法。
read
在远程计算机上运行,并且在终止ssh连接read
后没有消失。不幸的是,我无法将ktserver更改为输出任何内容。那有没有解决办法呢?
shopt -s huponexit
)。您可以测试一下是否适合您吗?
kill -9 ktserver
吗?