/etc/inittab respawn 이미 실행 중인 프로세스, Debian9

/etc/inittab respawn 이미 실행 중인 프로세스, Debian9

/etc/inittab바이너리를 다시 생성하기 위해 antry를 추가했습니다 . 항목은 다음과 같습니다.

id:2:respawn:/path-to-my-bin

그런 다음 을 실행하면 init q프로세스가 에 의해 시작됩니다 inittab. 프로세스를 종료하면 다시 생성됩니다.

질문

다음을 수행하면 이상한 동작이 발생합니다.

  1. 수동으로 실행/path-to-my-binary
  2. 위 항목을 다음에 추가하세요./etc/inittab
  3. 달리기init q

결과: 프로세스가 이미 실행 중이더라도 다시 생성됩니다.

또한 바이너리가 init.d시작 시 실행 수준 2에서 실행 되도록 설정된 경우 inittab시작 시 즉시 재생성됩니다.

답변1

간단한 대답은: 하지 마세요.

구성에 따라 프로세스를 처리하려면 /etc/inittab수동으로 또는 다른 곳에서 프로세스를 시작해서는 안 됩니다.

init해당 명령이 의 항목과 일치하는 경우 기존 프로세스는 확인되지 않습니다 inittab. 하위 프로세스, 즉 init자체적으로 시작된 프로세스만 모니터링합니다.
을 실행하면 init q프로세스 init는 (아직) 해당 라인에 대한 프로세스를 시작하지 않았음을 알고 id:2:respawn:/path-to-my-bin시작합니다.


불행하게도 이것이 명시적으로 어디에서 지정되었는지는 알 수 없습니다.
나에게는 이것이 사실임이 분명하며 그 이유는 다음과 같습니다.

  1. init자식 프로세스가 종료되면 신호를 받아 프로세스의 상태를 파악하고 사양을 확인한 후 inittab필요한 경우 프로세스를 다시 시작할 수 있습니다. 이는 이벤트 기반입니다. 관련이 없는 프로세스에서는 불가능하므로 init모든 프로세스를 확인해야 합니다. 여론조사일 수도 있습니다.
  2. init라인 중 하나와 동일한 명령을 실행하는 별도의 프로세스의 목적이 무엇인지 잘 모르겠습니다 inittab. 프로세스의 두 번째 인스턴스를 실행하는 것은 원하는 동작일 수도 있고 아닐 수도 있습니다.
  3. init이미 인스턴스를 시작한 후에 프로그램을 수동으로 시작한 경우 어떻게 하시겠습니까 ? 에 의해 시작된 프로세스가 나중에 종료되면 어떻게 되나요? 아니면 나중에 다른 프로세스가 종료되는 경우도 있나요?initinittabinittab

미해결 질문이 많기 때문에 init하위 프로세스만 처리하고 관련 없는 프로세스는 무시하는 것이 당연합니다.

관련 정보