Senden Sie ein SIGTERM-Signal an einen in SSH ausgeführten Prozess.

Senden Sie ein SIGTERM-Signal an einen in SSH ausgeführten Prozess.

Ist es möglich, einem Prozess innerhalb von SSH ein SIGTERM-Signal (oder ein anderes Signal) zu senden, zum Beispiel:

ssh hostname 'sleep 10; echo done'

Was kann ich tun, um den Sleep-Befehl zu unterbrechen? Wenn ich Strg-C drücke, wird der SSH-Befehl unterbrochen.

Antwort1

ctrl+cEine Weiterleitung an den Remote-Prozess ist möglich, indem man über eine Named Pipe auf dem Remote-Host einen „EOF to SIGHUP“-Konverter implementiert (siehe:Der SSH-Befehl wird nach der Beendigung von SSH unerwartet auf einem anderen System fortgesetzt).

ssh localhost '
TUBE=/tmp/myfifo.fifo
rm -f "$TUBE"
mkfifo "$TUBE"
<"$TUBE" sleep 100 &  appPID=$!
dd of="$TUBE" bs=1 2>/dev/null
kill $appPID
#kill -TERM -- -$$  # kill entire process group
rm -f "$TUBE"
'

Antwort2

-t könnte tun, was Sie wollen (siehehttps://superuser.com/a/20708/36198). Wenn Sie auch die Standardeingabe lesen möchten, müssen Sie das leider in zwei Schritten tun, wobei Ihnen für den zweiten Schritt nur Strg+C zur Verfügung steht, z. B.

tmp=$(bzcat foo.bz2 | ssh $user@$host '
    t=$(mktemp -t foo.XXXXXXXXXXX);
    cat >"$t";
    echo "$t";
')
ssh -t $user@$host "./cmd \"$tmp\""
ssh $user@$host "rm -f \"$tmp\""    

Antwort3

Wenn Sie die PID des Remote-Prozesses kennen, können Sie Folgendes tun:ssh hostname 'kill -TERM $pid'

verwandte Informationen