ssh内で実行中のプロセスにSIGTERMシグナルを送信する

ssh内で実行中のプロセスにSIGTERMシグナルを送信する

たとえば、ssh 内のプロセスに SIGTERM (またはその他の) シグナルを送信することは可能ですか?

ssh hostname 'sleep 10; echo done'

sleep コマンドを中断するにはどうすればよいですか? ctrl-c を押すと、ssh コマンドが中断されます。

答え1

ctrl+cリモート ホスト上の名前付きパイプを介して「EOF から SIGHUP」へのコンバータを実装することで、リモート プロセスに伝播することが可能です(参照:ssh が終了した後、ssh コマンドが予期せず他のシステムで続行される)。

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"
'

答え2

-t はあなたが望むことをするかもしれません(https://superuser.com/a/20708/36198残念ながら、stdinも読みたい場合は、2つのステップで実行する必要があります。2番目のステップではCtrl+Cのみを使用します。例:

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\""    

答え3

リモート プロセスの PID がわかっている場合は、次のように実行できます。ssh hostname 'kill -TERM $pid'

関連情報