나는 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를 쓰게 할 수 있습니까?
"PIDFILE"의 경로를 C 프로그램에 전달하면 부모가 자식 프로그램의 PID를 자식 프로그램에 쓰거나 2) 부모가 자식의 PID를 stdout/stderr에 출력하므로 밑받침 쉘은 그것을 캡쳐 할 수 있습니다 ... 3) C가 스스로 포크를하지 않고'start-stop-deemon '이 백그라운드로 보내면 PID를 알 수 있습니다. – jm666
문 # 2를 선택한다고 가정 해 보겠습니다. 위의 bash 명령을 어떻게 수정하면 될까요? – SoaperGEM
좋은 질문입니다. :) 우분투 (또는 심지어 리눅스)를 사용하지 않기 때문에'start-stop-daemon'이 어떻게 작동하는지 정확히 알지 못합니다. (그렇지 않으면 해설에 덧붙여서 해답을 추가했다.) 그래서 좀 더 기다리는 것이 더 낫습니다 ... – jm666