疑似端末なしで非対話型SSH呼び出し元を停止する方法

疑似端末なしで非対話型SSH呼び出し元を停止する方法

非対話型SSH呼び出し(疑似端末なし)を使用してプログラムを開始し、次の方法でセッションを終了するとしますCTRLC

$ ssh user@server -- sleep 123
^C

これにより、SSHセッションが終了した後もプログラム(sleep 123この例のプログラムなど)は引き続き実行されます。server

$ ssh user@server -- ps -ef | grep "sleep 123"
user     12430       1  0 19:28 ?        00:00:00 sleep 123

localの代わりにSIGINTをリモートで送信するsshオプションがあることを知っています。しかし、私は疑似端末に頼らず、呼び出し時に追加のオプションを指定せずにリモートプログラムを停止する方法を探しています。-tsleepsshssh

ベストアンサー1

状況によっては、部分的な解決策を思いついた。

アイデアは次のとおりです。sshクライアントで終了すると、コマンドで実行されるすべてのプログラムはserver親プロセスを失い、init親プロセスが割り当てられます。

したがって、実行中のプログラムを編集して親PIDを継続的に確認できた場合、PIDを1に切り替えるとクライアントのプロセスを終了する必要があることがserverわかります。ssh

cat <<-"EOF" | ssh user@server sh
while :; do
sleep 1
ppid="$(ps -p "$$" -o ppid= | tr -d "[:blank:]")"
[ "$ppid" = 1 ] && break
done
EOF

おすすめ記事