【发布时间】:2017-09-21 00:36:44
【问题描述】:
有两台机器,其中一台有一个脚本wait_for_signal.sh,第二台有一个名为controller.py的脚本。每个脚本的代码如下所示。
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 = user@ip
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 连接启动的远程进程?
【问题讨论】:
标签: python linux ssh process signals