다음은 특정 프로세스에서 데몬을 생성하는 몇 가지 단계입니다.
특정 프로세스는 하위 프로세스를 포크한 직후에 존재합니다.
아이들은 다음을 통해 전화를 걸어 새 세션과 새 그룹을 시작합니다.
setsid()
하지만 첫 번째 단계만 있고 두 번째 단계는 없는 경우가 있는 것 같습니다.
두 번째 단계 없이 첫 번째 단계만 갖는 목적은 무엇입니까?
데몬이 아닌 다른 것을 생성하고 싶은 것이 아닌가요?
감사해요.
답변1
높은 수준에서 그 목적은 제공한 bash 예제에서 가장 분명합니다. 일반 사용자가 대화형 bash 셸에 입력하면 ls
어떻게 되나요?
- 배쉬 포크
- 자식 프로세스 실행
ls
- 완료 되면
ls
하위 프로세스가 종료됩니다.
데몬은 ls
(보통) 매우 빨리 끝나기 때문에 멍청합니다.
또한 이상한 점은 쉘에서 분기된 모든 프로세스가 실행된다는 것입니다 setuid()
. 그러면 일반 사용자로 쉘을 실행할 수 없습니다.
fork/exec 사용에 대한 일반적인 규칙으로 데몬 세부 정보에 의존하지 마십시오.