向 ssh 內運行的進程發送 SIGTERM 訊號

向 ssh 內運行的進程發送 SIGTERM 訊號

是否可以向 ssh 內的程序發送 SIGTERM (或其他)訊號,例如:

ssh hostname 'sleep 10; echo done'

我可以做什麼來中斷睡眠命令?如果我按 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)。不幸的是,如果您也想讀取標準輸入,則需要分兩步驟執行,第二步只需按 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'

相關內容