상위 셸을 닫으면 프로세스 PPID가 1로 변경됩니다.

상위 셸을 닫으면 프로세스 PPID가 1로 변경됩니다.

새 터미널을 열고 다음 명령을 입력 하세요 firefox&.ps -l

4 R  1000 23132 23104 99  80   0 - 2177945 -    pts/27   00:00:07 firefox

명령을 사용하여 셸을 닫으면 exitFirefox 하위 프로세스는 열린 상태로 유지됩니다!

항상 이랬나요? Firefox도 닫아야 하지 않나요? 최근 커널에 새로운 것이 있거나 제가 놓친 것이 있나요?

그러면 결과 ps -el|grep firefox는 다음과 같습니다.

4 S  1000 23132     1 14  80   0 - 2233312 poll_s ?      00:00:21 firefox

PPID가 1로 변경되었습니다.

PPID가 1이 되는 원인은 무엇입니까?

편집: 아, 방금 터미널을 닫는 것과 셸을 닫는 결과가 매우 다르다는 것을 깨달았습니다. 터미널을 닫으면 모든 하위 프로세스가 닫히지만 종료 명령으로 셸을 닫을 때는 닫히지 않습니다... 이유가 확실하지 않습니다. (터미널을 닫으면 SIGTERM이 모든 하위 프로세스로 전송됩니까? 하지만 쉘을 닫으면 고아 프로세스가 남나요?)

답변1

최근 커널에 새로운 것이 있거나 제가 놓친 것이 있나요?

아니요, 프로세스가 종료되면 해당 하위 프로세스는 계속 실행되고 해당 상위 프로세스는 init(PID 1)로 변경됩니다. 또는 Linux에서 "하위 리퍼"를 찾는 것과 같은 다른 시스템 종속 프로세스도 있습니다.

이는 항상 그래왔으며, 이는 상위 프로세스를 두 번 포크하고 호출하고 종료하여 데몬으로 전환되는 프로세스의 nohup효율적인 작업과 부실을 허용합니다.setsid()

터미널 세션을 닫으면 SIGHUP나머지 프로세스로 전송될 수 있지만 이를 무시해도 됩니다(이것이 완료되었습니다 nohup). 또한 systemd터미널 로그인 세션이 종료될 때 지연된 프로세스를 종료하도록 구성할 수 있지만 firefox터미널 에뮬레이터의 X에서 실행 중일 수 있으므로 이는 적용되지 않습니다.

관련 정보