Es gibt zwei Maschinen, wobei eine über ein Skript wait_for_signal.sh
verfügt und die zweite ein Skript mit dem Namen controller.py
. Der Code jedes Skripts wird unten angezeigt.Senden von Signalen an Remote-Prozess mit Python
Der Zweck der controller.py
ist, einen Subprozess zu spawnen, der das Skript wait_for_signal.sh
über ssh
aufruft. Wenn der Controller beendet werden muss, muss er einen Interrupt an den Remote-Prozess senden, der wait_for_signal.sh
ausführt.
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)
Derzeit ist das Signal senden, um den Prozess, den die SSH-Verbindung auf dem lokalen Computer und nicht die Fernbedienung gestartet Maschine. Dies führt dazu, dass der lokale Prozess gestoppt wird, der Remote-Prozess jedoch weiterhin ausgeführt wird.
Wie funktioniert ssh und welche Art von Signalen wird an den entfernten Rechner gesendet, wenn er gestoppt wird? Wie kann ich das entsprechende Signal an den Remote-Prozess senden, der von der SSH-Verbindung gestartet wurde?