짧은 비 데몬 작업을 위해 launchd 사용


1

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

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

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

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

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


1) 뭔가를 프로그래밍한다면 StackOverflow로 옮기도록 투표 할 것입니다. 2) 모두 실제 사용 사례에 달려 있습니다. Hello World 프로그램에 대해 토론하는 것은 유용하지 않습니다. 삼) launchd 백그라운드 프로세스에 사용해야합니다. 다른 경우에는 "정상적인"시작 항목을 사용하십시오. 여기에 설명 된대로 .
slhck

답변:


1

이전 버전의 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가 남은 하위 프로세스를 "정리"하지 못하게합니다.


고맙습니다. 10.3과의 호환성은 문제가되지 않습니다.
jjs
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.