포크 및 종료가 프로세스를 데몬으로 만드나요?

포크 및 종료가 프로세스를 데몬으로 만드나요?
int main()
{
    if (!fork()) sleep(3000);
    exit(0);
}

쉘에서 위 프로그램을 호출하면 고아 프로세스가 생성됩니다.

  1. 채택 init또는 채택 upstart(내 Ubuntu 데스크탑에서)
  2. 쉘과 동일한 세션에서
  3. 잃어버린 팀 리더
  4. 쉘 작업 제어 없이 관리,이는 쉘이 SIGHUP을 수신하더라도 SIGHUP을 수신하지 않음을 의미합니다.

4에 관하여: 저는 bash이것을 Ubuntu 데스크탑에서 테스트하고 확인했습니다. 이것이 SIGHUP 이외의 신호에 작동하는지 확실하지 않습니다. 작업 에도 동일한 경우 disown: jobs명령으로 나열되지 않은 프로세스 그룹은 SIGHUP을 수신하지 않습니다.

모든 FD를 끄고 chdir파일에 기록할 수도 있으므로 이 데몬과 일반 데몬의 유일한 차이점은 다음과 같습니다.

  1. 내 프로세스는 여전히 셸과 동일한 세션을 공유합니다.
  2. 내 프로세스에는 표시된 대로 여전히 "control tty"가 있습니다.ps j

그래서 내 질문은: 이 프로세스를 데몬으로 간주할 수 있습니까?

또는 다른 말로 하면, 데몬이 setsid()ctty 없이 새 세션( call )에 있는 것이 왜 그렇게 중요한가요? 왜냐하면 이는 쉘이 호출된 동일한 세션과 아무 관련이 없기 때문입니다(그렇지 않은 경우 정정해 주십시오). ctty 연결?

즉, 데몬 역할을 하려는 프로세스가 세션을 그대로 유지하고 터미널에 계속 연결되어 있는 것이 왜 나쁜가요(FD를 닫더라도)?

나는 이러한 문제가 본질적으로 동일하다고 생각합니다. 미리 감사드립니다.

참고 자료(그러나 설득력이 없었음)

관련 정보