터미널: 식별자 또는 지정된 이름을 사용하여 백그라운드에서 프로그램을 실행합니다.

터미널: 식별자 또는 지정된 이름을 사용하여 백그라운드에서 프로그램을 실행합니다.

프로그램이나 스크립트를 실행하고 나중에 이를 식별하여 아직 실행 중인지 확인하려면 어떻게 해야 합니까?

예: 저는 약 10시간 동안 백그라운드에서 PHP 스크립트를 실행하고 있습니다(다양한 API 등에서 많은 데이터 가져오기). 내가 달릴 때맨 위그 과정을 봤어요PHP아직 실행 중입니다. 하지만 동시에 두 번째 PHP 스크립트를 실행하면 어떻게 될까요? 어느 것이 첫 번째이고 어느 것이 두 번째인지 식별하는 방법은 무엇입니까?

몇 시간 후에도 스크립트가 계속 실행되는지 알고 싶기 때문에 필요합니다.

고쳐 쓰다

다음 명령을 사용하여 PHP 프로세스를 식별하고 아직 실행 중인지 확인합니다.

ps cax | grep "php$" | grep -o '^[ ]*[0-9]*'

PHP와 함께 사용 하고 0보다 큰지 $pid = exec("..");확인합니다 . $pid0보다 크지 않으면 실행되고 있지 않은 것입니다. 그렇지 않으면 실행 중이며 프로세스 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!'

관련 정보