Bash ssh连接断开后如何停止已启动的程序
我通过ssh连接控制了两个Raspberry Pis,并在每个Pis上启动了一个程序。一个程序称为collpre,另一个称为test。到目前为止,它工作得很好,但我发现,在我断开ssh隧道后,启动的程序仍在运行 有人知道我如何确保一旦ssh连接断开,启动的程序就被终止了吗 这里是我的bash代码。我想在两个单独的xterm终端中完成,因为这些程序打印出一些需要观察的数据Bash ssh连接断开后如何停止已启动的程序,bash,ssh,kill,disconnect,Bash,Ssh,Kill,Disconnect,我通过ssh连接控制了两个Raspberry Pis,并在每个Pis上启动了一个程序。一个程序称为collpre,另一个称为test。到目前为止,它工作得很好,但我发现,在我断开ssh隧道后,启动的程序仍在运行 有人知道我如何确保一旦ssh连接断开,启动的程序就被终止了吗 这里是我的bash代码。我想在两个单独的xterm终端中完成,因为这些程序打印出一些需要观察的数据 #!usr/bin/bash -f xterm -title "Pi1" -hold -e ssh -i
#!usr/bin/bash -f
xterm -title "Pi1" -hold -e ssh -i $HOME/.ssh/key_rsa "pi@192.168.0.107" "python3 collpre.py" &
xterm -title "Pi2" -hold -e ssh -i $HOME/.ssh/key_rsa "pi@192.168.0.108" "python3 test.py"
非常感谢。请参阅这篇关于SSH会话和守护进程生命周期的文章
至于你的问题,他们应该被杀,最终。。。但这种行为取决于SSH实现。根据xterm文档,您可以使用Ctrl+d退出,这将关闭终端窗口。Ctrl+c可能正在终止xterm,但ssh会话可能没有意识到会话已立即结束
如果要保证某个进程能够生存,可以使用
屏幕将-t
添加到ssh
命令中
没有-t
,sshuser@host命令
不会在远程端分配pty。而CTRL-C只会终止(SIGINT
)本地ssh命令
ssh-tuser@host命令
将在远程端分配一个pty,并在该pty上运行该命令。对于这种情况,ssh将把CTRL-C传递给远程pty,这将导致SIGINT
被发送到远程命令并杀死它
您可以这样进行验证:
$sshuser@host睡眠123
您是如何断开ssh的?只需按“ctrl+c”键。有“更干净”的方法吗?