프로그램이나 스크립트를 실행하고 나중에 이를 식별하여 아직 실행 중인지 확인하려면 어떻게 해야 합니까?
예: 저는 약 10시간 동안 백그라운드에서 PHP 스크립트를 실행하고 있습니다(다양한 API 등에서 많은 데이터 가져오기). 내가 달릴 때맨 위그 과정을 봤어요PHP아직 실행 중입니다. 하지만 동시에 두 번째 PHP 스크립트를 실행하면 어떻게 될까요? 어느 것이 첫 번째이고 어느 것이 두 번째인지 식별하는 방법은 무엇입니까?
몇 시간 후에도 스크립트가 계속 실행되는지 알고 싶기 때문에 필요합니다.
고쳐 쓰다
다음 명령을 사용하여 PHP 프로세스를 식별하고 아직 실행 중인지 확인합니다.
ps cax | grep "php$" | grep -o '^[ ]*[0-9]*'
PHP와 함께 사용 하고 0보다 큰지 $pid = exec("..");
확인합니다 . $pid
0보다 크지 않으면 실행되고 있지 않은 것입니다. 그렇지 않으면 실행 중이며 프로세스 ID를 가지고 있습니다.
답변1
직접 실행 스크립트 사용셰르본( #!/usr/bin/php
첫 번째 줄에 스크립트를 실행 가능으로 표시합니다). ps ax
출력에 스크립트 이름이 표시됩니다(예: /usr/bin/php /path/to/your/script
.
또는 호출 스크립트의 PID를 다른 파일에 저장할 수 있습니다. 스크립트가 실행 중인지 확인하려면 해당 PID를 가진 프로세스가 존재하는지 확인하세요. PID가 재사용되므로 프로세스가 일치하는지 cmdline
확인 해야 할 수도 있습니다.exec
설명대로@Blayer의 답변다시 말하지만 둘 다 100% 신뢰할 수는 없습니다.
답변2
짧은 대답: 할 수 없습니다.
보통 답변: PHP 프로세스를 시작한 상위 프로세스 외부에서 PHP 프로세스를 100% 확실하게 식별할 수는 없습니다.
긴 답변:배쉬 프로세스 관리
궁극적으로 top
다른 ps
프로세스에 의해 시작된 프로세스를 명확하게 식별하기 위해 등을 사용할 수 없습니다. 프로세스가 예기치 않게 종료되었습니다. PID는 재활용됩니다. 프로세스 이름은 변경될 수 있습니다.
단일 수명이 긴 데몬/프로세스에서 모든 것을 시작할 수 있습니까? 이것이 최선의 선택입니다. 최소한 상위 프로세스에 PHP 프로세스의 PID를 저장하도록 하세요. 물론 이것이 완벽한 방법은 아니지만요. 심각한 문제가 발생할 위험을 감수하려는 경우 이 페이지를 읽고 위험을 완화하는 방법을 알아보세요.
(물론, 페이지의 분위기는 매우 엄격하지만 사이트의 목표는 정확성입니다. 업무상 중요한 서비스를 실행하지 않거나 사람들의 생명이 의존하는 서비스를 운영하지 않는 경우에는 내용을 약간 퍼지할 수 있습니다.)
두 번째 부분에 대답하려면, 정확하다고 생각하는 PID가 있으면 해당 PID가 아직 실행 중인지 확인할 수 있습니다.
kill -0 <PID> && echo 'The process is still running!'