하위 프로세스를 포크한 후에도 일부 프로그램의 프로세스가 여전히 존재하지만 하위 프로세스가 새 프로세스 세션을 시작하지 않는 이유는 무엇입니까?

하위 프로세스를 포크한 후에도 일부 프로그램의 프로세스가 여전히 존재하지만 하위 프로세스가 새 프로세스 세션을 시작하지 않는 이유는 무엇입니까?

다음은 특정 프로세스에서 데몬을 생성하는 몇 가지 단계입니다.

  • 특정 프로세스는 하위 프로세스를 포크한 직후에 존재합니다.

  • 아이들은 다음을 통해 전화를 걸어 새 세션과 새 그룹을 시작합니다.setsid()

하지만 첫 번째 단계만 있고 두 번째 단계는 없는 경우가 있는 것 같습니다.

두 번째 단계 없이 첫 번째 단계만 갖는 목적은 무엇입니까?

데몬이 아닌 다른 것을 생성하고 싶은 것이 아닌가요?

감사해요.

답변1

높은 수준에서 그 목적은 제공한 bash 예제에서 가장 분명합니다. 일반 사용자가 대화형 bash 셸에 입력하면 ls어떻게 되나요?

  • 배쉬 포크
  • 자식 프로세스 실행ls
  • 완료 되면 ls하위 프로세스가 종료됩니다.

데몬은 ls(보통) 매우 빨리 끝나기 때문에 멍청합니다.

또한 이상한 점은 쉘에서 분기된 모든 프로세스가 실행된다는 것입니다 setuid(). 그러면 일반 사용자로 쉘을 실행할 수 없습니다.

fork/exec 사용에 대한 일반적인 규칙으로 데몬 세부 정보에 의존하지 마십시오.

관련 정보