Tl; dr :
sleep로그 아웃하고 터미널을 닫을 때 프로세스가 지속되는 이유는 무엇 입니까? 내 생각에, 데몬과 nohup프로그램을 제외한 모든 것은 로그 아웃하는 동안 죽을 것이다. sleep이런 식으로 살아남을 수 있다면 nohup명령 대신이 방법을 사용할 수 있습니까?
에 bash의해 생성 된 인스턴스 ssh에 huponexit옵션이 설정되어 있지 않으면 종료 / 로그 아웃시 어떠한 방법으로도 프로세스가 종료되지 않으며 huponexit옵션이 설정된 kill -9경우 쉘에서 사용 nohup하는 것이 쉘의 자식 프로세스 에서 사용 하는 것의 좋은 대안이 아닙니다 . nohup쉘의 자식 프로세스는 여전히 쉘에서 나오지 않는 SIGHUP으로부터 프로세스를 보호하며, 중요하지 않은 경우에도 nohup쉘을 정상적으로 종료 할 수 있기 때문에 여전히 선호됩니다.
여기 bash에 옵션이 huponexit있는데, 설정하면 bash종료 / 로그 아웃시 SIGHUP을 자식으로 만듭니다 .
에 의해 생성 된 인스턴스 와 같은 대화 형 비 로그인 bash 인스턴스 에서는이 옵션이 무시됩니다. 설정 또는 설정 해제 여부에 관계없이 종료시 자녀는 절대 SIGHUP되지 않습니다 .bashgnome-terminalhuponexitbashbash
에 의해 생성 된 인스턴스 와 같은 대화식 로그인 bash 인스턴스 에서이 옵션은 무시되지 않습니다 (단, 기본적으로 설정되어 있지는 않습니다). 경우 설정, 의 아이들에 의해 SIGHUPped 될 것입니다 종료 / 로그 아웃시; 경우 설정 해제, 의 아이들에 의해 SIGHUPped되지 않습니다 종료 / 로그 아웃시;bashsshhuponexitbashbashhuponexitbashbash
따라서 일반적으로 대화식 로그인 bash인스턴스 에서 종료 / 로그 아웃하는 경우 ( huponexit옵션이 설정되지 않은 경우 쉘 SIGHUP을 자식으로 만들지 않으며 대화식 비 로그인 bash인스턴스 에서 종료 / 로그 아웃 하면 쉘 SIGHUP을 자식으로 만들지 않습니다. 상관없이;
그러나이 경우에는 무의미 kill -9 sleep합니다. 부모 프로세스를 bash종료하면 ( ) 후자가 전자에 대해 아무것도 할 가능성이 없기 때문에 (예 : 현재 bash인스턴스가 로그인 bash인스턴스 인 경우 ) 사용 여부에 관계없이 사용 합니다. 그리고 huponexit옵션)를 SIGHUP하기 위해 설정되었다.
여기에 SIGHUP 신호와 같은 다른 신호와 달리 bashSIGKILL 신호는 프로세스의 자식 프로세스로 전파 sleep되지 않으므로 종료되지도 않습니다.
nohupSIGHUP 신호에 영향을받지 않는 프로세스를 시작합니다. SIGHUP 신호를 수신하면 프로세스가 중단되는 것을 방지합니다.이 경우 옵션이 설정되고 쉘이 종료 bash된 경우 대화식 로그인 인스턴스 가이를 수신 할 수 있습니다 huponexit. 따라서 기술적으로 unset 옵션 nohup을 사용하여 대화식 로그인 bash인스턴스 에서 프로세스를 시작하면 huponexitSIGHUP 신호 수신시 프로세스가 중단되는 것을 막을 수 있지만 쉘에서 나가거나 로그 아웃하면 SIGHUP되지 않습니다.
그러나 일반적으로 nohup상위 쉘에서 SIGHUP 신호가 들어오는 것을 방지해야하는 kill -9경우 상위 메소드를 하위 메소드보다 선호하는 이유는 없습니다 nohup. 대신에 반대가되어야합니다.
kill -9메소드를 사용하여 부모를 종료해도 부모가 정상적으로 종료 될 가능성은 없지만, nohup메소드를 사용하여 자식을 시작하면 SIGHUP와 같은 다른 신호로 부모를 종료 할 수 있습니다 (상황에 맞는 예를 만들기 위해) )를 사용하기 시작한 아이 중 하나가 nohup정상적으로 종료됩니다.
&프로세스를 백그라운드 (데몬과 같은)로 분기하고 로그 아웃하더라도 계속 실행됩니다.