PID를 수집하기 위해 로그 파일을 구문 분석하고 해당 PID가 실행 중인지 확인하는 Perl 스크립트를 작성 중입니다. 확인하는 가장 좋은 방법을 생각하고 있습니다. 분명히, 나는 다음과 같은 것을 할 수 있습니다 :
system("ps $pid > /dev/null") && print "Not running\n";
그러나 가능한 경우 시스템 호출을 피하고 싶습니다. 따라서 /proc
파일 시스템을 사용할 수 있다고 생각했습니다 (이동성은 문제가되지 않으며 항상 Linux 시스템에서 실행됩니다). 예를 들면 다음과 같습니다.
if(! -d "/proc/$pid"){
print "Not running\n";
}
안전한가요? /proc/$pid/
디렉토리가 없으면 연관된 PID가 실행되고 있지 않다고 항상 가정 할 수 있습니까 ? 어쨌든 AFAIK ps
자체가 정보를 얻었 으므로 기대 /proc
하지만 이것이 프로덕션 코드 용이므로 확실합니다.
따라서 실행중인 프로세스에 /proc/PID
디렉토리가 없거나 /proc/PID
디렉토리가 있고 프로세스가 실행되고 있지 않은 경우가 있습니까? ps
디렉토리가 있는지 확인 하는 것보다 구문 분석을 선호하는 이유가 있습니까?
kill -0
가장 좋은 방법이 무엇이든 ), 이것은 주어진 PID로 실행중인 프로세스가 있는지 여부를 알려줍니다 . 프로세스가 1 밀리 초 후에도 계속 실행 될지 여부를 알려주지 않으며, 프로세스가 관심있는 프로세스인지 또는 흥미로운 프로세스가 종료 된 후 동일한 PID가 지정된 관련되지 않은 프로세스인지 여부를 알려주지 않습니다. . 주어진 PID가 실행 중인지 테스트하는 것은 거의 항상 실수 입니다. 경쟁 조건에 취약하지 않은 환경은 거의 없습니다.
kill
신호 0을 사용 하는 펄 함수가 있습니다.