2017-03-29 23 views
0

나는 C로 작성한 프로그램을 시작하기 위해 init.d 스크립트를 작성하고 있습니다.이 프로그램은 자식 프로세스를 생성하기 위해 fork()을 호출하는 예쁜 표준 템플릿을 따르고 부모 프로세스는 거의 즉시 종료됩니다. 내가 겪고있는 문제는 PID 파일에 부모 프로세스 ID가 기록되어 나중에 "정지"를 호출 할 때 부모가 오랫동안 종료되어 자식 만 실행 중이기 때문에 실패한다는 것입니다.start-stop-daemon을 사용하여 자식 프로세스 ID를 pid 파일에 기록하려면 어떻게해야합니까?

현재 내 시작 스크립트에서이 명령을 :

start-stop-daemon --start --background -m --oknodo --pidfile "$PIDFILE" --exec "$SCRIPT" || return 2 

나는 그래서 심지어 완전히 확인 모든 플래그가하는 일이 아니에요 내가이 모든 아주 새로운 해요 고백. 이것은 주로 내가 탔던 여러 기사에서 복사/붙여 넣기였습니다. 어쨌든, 이것은 상당히 일반적인 것처럼 보일 것입니다. 어떻게 pid 파일에 올바른 (즉, 자식) 프로세스 ID를 쓰게 할 수 있습니까?

+0

"PIDFILE"의 경로를 C 프로그램에 전달하면 부모가 자식 프로그램의 PID를 자식 프로그램에 쓰거나 2) 부모가 자식의 PID를 stdout/stderr에 출력하므로 밑받침 쉘은 그것을 캡쳐 할 수 있습니다 ... 3) C가 스스로 포크를하지 않고'start-stop-deemon '이 백그라운드로 보내면 PID를 알 수 있습니다. – jm666

+0

문 # 2를 선택한다고 가정 해 보겠습니다. 위의 bash 명령을 어떻게 수정하면 될까요? – SoaperGEM

+0

좋은 질문입니다. :) 우분투 (또는 심지어 리눅스)를 사용하지 않기 때문에'start-stop-daemon'이 어떻게 작동하는지 정확히 알지 못합니다. (그렇지 않으면 해설에 덧붙여서 해답을 추가했다.) 그래서 좀 더 기다리는 것이 더 낫습니다 ... – jm666

답변

0

데몬은 자신이 만든 .pid 파일을 만들어야합니다. 당신이 당신의 시작 PID를 바꿀 때 그것에 의한 절차를 대몬 모으기 때문에.

옵션 --pidfile은 이미 생성 한 pid 파일 용입니다. 또한 start-stop-daemon은 옵션 --make-pidfile을 가지고 있지만, 자기 자신을 데몬 시즈하지 않는 프로그램에만 유용합니다.

-m, --make-pidfile ... 참고 :이 기능은 모든 경우에 작동하지 않을 수 있습니다. 가장 주목할만한 것은 프로그램이 실행될 때 주 프로세스에서 발생합니다.

Here 당신은 데몬에서 pid 파일을 만드는 방법을 찾을 수 있습니다.