
프로세스를 시작하고 모니터링하기 위해 PHP 스크립트를 작성 중입니다. 나는 이 작업을 수행하곤 했지만 ps <pid>
드문 경우지만 내 프로세스가 실제로 종료된 후 동일한 PID에 의해 실행되는 관련 없는 프로세스가 있었기 때문에 신뢰할 수 없습니다.
그래서 PHP 스크립트가 시작된 프로세스인지 확인할 수 있도록 명령에 임의의 문자열을 추가하고 싶었습니다. 이를 수행하기 위한 나의 옵션은 무엇입니까?
지금까지 나는 이것을 생각해 냈습니다.
"USELESS_VAR_0nQjdXR45P=\"{$cmdRandomString}\" | $cmd"
여기서 $cmd는 내가 실행하려는 실제 명령입니다. $cmdRandomString은 내가 추가한 임의의 문자열입니다. 그러나 어떤 이유로 in은 ps aux
여기에 쓸모없는 var를 표시하지 않습니다.
빨리 끝나서 그런가?
또한 다음과 같은 더미 명령 옵션을 추가하려고 시도했지만 --xxxx=yyyy
해당 명령은 옵션을 알 수 없는 치명적인 오류를 반환했습니다.
이를 수행할 수 있는 방법이 있습니까? 아니면 신뢰할 수 없는 PID 외에 프로세스를 식별할 수 있는 신뢰할 수 있는 방법이 있습니까?
답변1
신뢰할 수 없는 PID 외에 프로세스를 식별할 수 있는 신뢰할 수 있는 방법이 있습니까?
이를 안정적으로 수행하는 방법은 프로세스를 직접 시작하고 프로세스가 종료될 때 이를 포착하는 것입니다. 예를 들어 유닉스 신호 SIGCHILD를 수신합니다. pid는 아동 사망 알림을 사용할 때까지 계속 존재합니다("좀비"라고 하는 상태) waitpid()
. 예: .
어떤 경우에는 이를 프로세스 감독자 데몬(예: )에 위임해야 합니다 systemd
. 예를 들어 다음을 사용하여 쿼리할 수 있습니다 systemctl status my-process.service
. 이는 데몬과 같이 장기 실행 프로세스를 시작하는 데 필요한 PHP 웹 페이지가 있는 경우 유용합니다.