ssh 세션을 종료 한 후에도 원격 프로세스가 계속 실행되는 이유는 무엇입니까?


15

로컬 쉘 에서이 명령을 실행하여 원격 로그 파일을 마무리합니다.

ssh remotemachine tail -100f /path/to/error_file

이 명령에서 ctrl-c를 실행하면 ctrl-c가 로컬 ssh 프로세스를 종료하고 꼬리를 원격 컴퓨터에서 실행하는 것처럼 보입니다. 나는 연결을 끊으면 끊기 신호 (nohup을 사용하지 않기 때문에)를 보내고 프로세스를 종료 할 것이라는 인상을 받았지만 분명히 그렇지 않습니다.

끊기 신호가 전송되거나 전송되지 않을 때 더 많은 조명을 비출 수 있습니까? 원격 컴퓨터는 우분투이며 로컬 쉘은 OS X bash입니다.

답변:


13

이 동작은 실행중인 프로세스에 대한 제어 터미널이 없기 때문에 발생합니다. 원격 프로세스에 제어 터미널이없는 경우 세션을 처리하는 원격 ssh 프로세스가 명령을 종료 할 수 없습니다.이 명령은 좀비 상태로 걸려 결국 init에 의해 정리됩니다.

제어 터미널을 제공하는 -t 옵션을 사용하여이 문제를 해결할 수 있습니다. ssh 명령을 원격으로 ctrl-c 할 때 프로세스가 종료됩니다.

-t 옵션 :

의사 -tty 할당을 강제합니다. 이는 원격 컴퓨터에서 임의의 화면 기반 프로그램을 실행하는 데 사용할 수 있으며, 예를 들어 메뉴 서비스를 구현할 때 매우 유용합니다. ssh에 로컬 tty가 없더라도 다중 -t 옵션은 tty 할당을 강제합니다.

제어 터미널을 사용하는 것과 관련하여 이스케이프 문자를 보내는 기능과 같은 다른 의미가 있으므로이 옵션을 사용할 때는 man sshman sshd를 살펴보십시오 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.