비대화형 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
옵션이 있다는 것을 알고 있습니다 . 그러나 나는 의사 터미널에 의존하지 않고 호출 시 추가 옵션을 지정하지 않고도 원격 프로그램을 중지시킬 수 있는 방법을 찾고 있습니다 .-t
sleep
ssh
ssh
답변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