SSH 내부에서 실행되는 프로세스에 SIGTERM 신호 보내기

SSH 내부에서 실행되는 프로세스에 SIGTERM 신호 보내기

SIGTERM(또는 기타) 신호를 ssh 내부 프로세스에 보낼 수 있습니까? 예:

ssh hostname 'sleep 10; echo done'

절전 명령을 중단하려면 어떻게 해야 합니까? ctrl-c를 누르면 ssh 명령이 중단됩니다.

답변1

ctrl+c원격 호스트의 명명된 파이프를 통해 "EOF to 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도 읽으려면 두 단계로 나누어야 합니다. 두 번째 단계에서는 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'

관련 정보