← 질문 목록
#42깊이 0
데몬 프로세스는 왜 세션 리더로 지정되지 않는가?
운영체제깊이
세션 리더만 제어 터미널을 획득할 수 있어서다. 더블 포크의 최종 데몬은 리더가 아니라 새 제어 터미널을 얻을 수 없고, 그래서 터미널 쪽 신호와 엮이지 않는다.
| 실행 형태 | 터미널 관계 |
|---|---|
| 터미널 세션 | 사용자 로그인, 쉘로 제어 |
| 데몬 프로세스 | 세션 리더가 아니며, 제어 터미널 없음 |
터미널이 끊기면 SIGHUP은 원인에 따라 세션 리더나 전면 프로세스 그룹에 간다. 로그아웃할 때 셸이 자기 작업들에 SIGHUP을 보내기도 한다. 전통적인 방식은 새 세션을 만든 뒤 다시 fork해 세션 리더가 아닌 자식으로 남는다.
systemd가 띄우는 요즘 데몬은 이 절차를 밟지 않는다.
첫 자식이 setsid()를 부르면 새 세션의 리더이자 새 프로세스 그룹의 리더가 되면서 제어 터미널이 떨어진다. 여기서 한 번 더 fork하면 최종 데몬은 리더가 아니라 터미널을 다시 획득할 수 없다.