짧은 비 데몬 작업을 위해 launchd 사용 데몬이 실행 된 후 너무 빨리

os x에서 “시작 항목”을 만들고 싶습니다. 최근의 모든 문서는 launchd가 전통적인 Startup Items보다 선호되어야한다고 제안합니다.

그러나 launchd는 실제 데몬을 시작하기위한 것이지 업무를 끝내고 나가는 빠른 작업을위한 것이 아닙니다. 그만큼 개발자 라이브러리 문서 말한다 :

중대한: 데몬이 실행 된 후 너무 빨리 종료되면 launchd가 충돌했다고 생각할 수 있습니다. 이 동작을 계속하는 데몬은 일시 중단 될 수 있으며 이후 요청이 도착하면 다시 시작되지 않을 수 있습니다. 이 문제를 방지하려면 시작한 후 최소 10 초 동안 종료하지 마십시오.

이것은 발사가가는 길은 아니라는 인상을 준다. 10 초의 수면을 구현하는 것은 엉성한 솔루션처럼 들립니다.

본질적으로 제 질문은 다음과 같습니다. 시작시 “Hello world”프로그램을 실행하는 올바른 방법은 무엇입니까? 여기에 잘못된 도구가 발사 되었습니까?



답변

이전 버전의 OS X (예 : 10.3 이하)와의 호환성이 필요한 경우가 아니면 LaunchDaemon을 사용합니다. 너무 빨리 종료되는 데몬 문제는 launchd가 데몬을 다시 시작해야하는 경우에만 문제가됩니다. 귀하의 사례를 이해한다면 이는 관련이 없습니다. StartupItem보다는 LaunchDaemon을 사용하는 이유는 부팅 프로세스가 StartupItems이 완료 될 때까지 기다릴 것이기 때문입니다. 이 테스트를 잘 해보지는 못했지만 내 생각에 꽤 빠른 StartupItem이라도 부팅 프로세스 속도를 상당히 늦출 수 있습니다.

그래서 나는 LaunchDaemon과 함께 갈 것입니다. .plist가 다음을 포함하는지 확인하십시오.

<key>RunAtLoad</key>
<true/>
<key>KeepAlive</key>
<false/>

프로그램이 부모 프로세스가 종료 된 후에도 실행해야하는 모든 하위 프로세스를 생성하는 경우 다음을 포함해야합니다.

<key>AbandonProcessGroup</key>
<true/>

… launchd가 남은 하위 프로세스를 “정리”하지 못하게합니다.