Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash ssh连接断开后如何停止已启动的程序_Bash_Ssh_Kill_Disconnect - Fatal编程技术网

Bash ssh连接断开后如何停止已启动的程序

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

我通过ssh连接控制了两个Raspberry Pis,并在每个Pis上启动了一个程序。一个程序称为collpre,另一个称为test。到目前为止,它工作得很好,但我发现,在我断开ssh隧道后,启动的程序仍在运行

有人知道我如何确保一旦ssh连接断开,启动的程序就被终止了吗

这里是我的bash代码。我想在两个单独的xterm终端中完成,因为这些程序打印出一些需要观察的数据

#!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”键。有“更干净”的方法吗?