/etc/inittab
바이너리를 다시 생성하기 위해 antry를 추가했습니다 . 항목은 다음과 같습니다.
id:2:respawn:/path-to-my-bin
그런 다음 을 실행하면 init q
프로세스가 에 의해 시작됩니다 inittab
. 프로세스를 종료하면 다시 생성됩니다.
질문
다음을 수행하면 이상한 동작이 발생합니다.
- 수동으로 실행
/path-to-my-binary
- 위 항목을 다음에 추가하세요.
/etc/inittab
- 달리기
init q
결과: 프로세스가 이미 실행 중이더라도 다시 생성됩니다.
또한 바이너리가 init.d
시작 시 실행 수준 2에서 실행 되도록 설정된 경우 inittab
시작 시 즉시 재생성됩니다.
답변1
간단한 대답은: 하지 마세요.
구성에 따라 프로세스를 처리하려면 /etc/inittab
수동으로 또는 다른 곳에서 프로세스를 시작해서는 안 됩니다.
init
해당 명령이 의 항목과 일치하는 경우 기존 프로세스는 확인되지 않습니다 inittab
. 하위 프로세스, 즉 init
자체적으로 시작된 프로세스만 모니터링합니다.
을 실행하면 init q
프로세스 init
는 (아직) 해당 라인에 대한 프로세스를 시작하지 않았음을 알고 id:2:respawn:/path-to-my-bin
시작합니다.
불행하게도 이것이 명시적으로 어디에서 지정되었는지는 알 수 없습니다.
나에게는 이것이 사실임이 분명하며 그 이유는 다음과 같습니다.
init
자식 프로세스가 종료되면 신호를 받아 프로세스의 상태를 파악하고 사양을 확인한 후inittab
필요한 경우 프로세스를 다시 시작할 수 있습니다. 이는 이벤트 기반입니다. 관련이 없는 프로세스에서는 불가능하므로init
모든 프로세스를 확인해야 합니다. 여론조사일 수도 있습니다.init
라인 중 하나와 동일한 명령을 실행하는 별도의 프로세스의 목적이 무엇인지 잘 모르겠습니다inittab
. 프로세스의 두 번째 인스턴스를 실행하는 것은 원하는 동작일 수도 있고 아닐 수도 있습니다.init
이미 인스턴스를 시작한 후에 프로그램을 수동으로 시작한 경우 어떻게 하시겠습니까 ? 에 의해 시작된 프로세스가 나중에 종료되면 어떻게 되나요? 아니면 나중에 다른 프로세스가 종료되는 경우도 있나요?init
inittab
inittab
미해결 질문이 많기 때문에 init
하위 프로세스만 처리하고 관련 없는 프로세스는 무시하는 것이 당연합니다.