有兩臺機器,其中一臺具有腳本wait_for_signal.sh
,另一臺具有名爲controller.py
的腳本。每個腳本的代碼如下所示。使用Python將信號發送到遠程進程
controller.py
的用途是生成一個子進程,該子進程通過ssh
調用wait_for_signal.sh
腳本。當控制器需要退出時,它需要向運行wait_for_signal.sh
的遠程進程發送一箇中斷。
wait_for_signal.sh
#!/bin/bash
trap 'break' SIGINT
trap 'break' SIGHUP
echo "Start loop"
while true; do
sleep 1
done
echo "Script done"
controller.py
import os
import signal
import subprocess
remote_machine = [email protected]
remote_path = path/to/script/
remote_proc = subprocess.Popen(['ssh', '-T', remote_machine,
'./' + remote_path + 'wait_for_signal.sh'],
shell=False, stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
# do other stuff
os.kill(remote_proc.pid, signal.SIGINT)
目前,信號發送,是該開始在本地機器上的SSH連接的過程,而不是遠程機。這導致本地進程停止,但遠程進程繼續執行。
ssh如何工作以及它在停止時發送給遠程機器的信號類型?如何將適當的信號發送到由ssh連接啓動的遠程進程?