이것은 여기뿐만 아니라 스택 교환 네트워크의 다른 사이트에서도 여러 번 해결 된 질문입니다 (예 : ssh 자체를 인터럽트 할 때 ssh가 원격 프로세스를 종료하도록 만드는 방법은 무엇입니까? ). 그러나 해결책을 찾지 못했습니다.
ssh를 통해 명령을 실행하고 있습니다. ssh를 종료 할 때마다 명령도 죽기를 원합니다. 이 명령은 Ctrl-C를 누를 때까지 무한정 실행되는 ktserver라는 데몬입니다.
다음과 같이 실행합니다. ssh -t compute-0-1 ktserver
실제로 Ctrl-C를 누르면 프로세스가 정상적으로 종료되고 ssh 세션이 종료됩니다.
그러나 Ctrl-C를 누르는 대신 kill
SIGINT 또는 SIGHUP 전송 과 같은 명령을 사용하여 ssh 프로세스를 종료 하면 ktserver
프로세스는 활성 상태로 유지됩니다.
어떻게 ktserver
죽으면 어떻게 항상 죽을 수 ssh
있습니까?
편집 : ktserver
와 같이 완전히 다른 것을 실행하는 대신 gedit
모든 것이 매력처럼 작동합니다 (예 : 연결이 죽으면 gedit이 죽습니다). 따라서 프로세스 자체에 문제가있을 수 있습니다. 예를 들어 SIGHUP 또는 SIGINT를 무시하고 있다고 생각했습니다. 그러나, 나는 실행할 때 kill -1 ktserver
또는 kill -2 ktserver
, 프로세스 다이 예상대로.
EDIT2 : Mark Plotnick이 지적했듯이 문제는 ssh 채널에서 통신하는 통신이 없다는 사실과 관련이 있습니다. ssh -t <host> read
나중에 ssh 프로세스 를 실행 하고 종료하여 확인했습니다 . read
여전히 살아 있고 발로 차있었습니다.
ssh example.com dd ...
애프터 완료 몇 시간에 실행되는 작업 ssh
으로 인해 네트워크 문제로 연결 다이. 당신이 바꿀 수 있다면 ktserver
잠시 한번 출력 뭔가 옵션을 취할, 그 해결 될 수있다.
read
원격 컴퓨터에서 실행 을 시도했지만 ssh 연결을 종료 한 후에도 read
죽지 않았습니다. 불행히도, ktserver를 변경하여 아무것도 출력하지 못했습니다. 그렇다면 해결책이 없습니까?
shopt -s huponexit
). 이것이 당신을 위해 작동하는지 테스트 할 수 있습니까?
kill -9 ktserver
?