![pid가 존재하는지 확인하는 크로스 플랫폼(Linux, BSD, Solaris) 방법](https://linux55.com/image/20872/pid%EA%B0%80%20%EC%A1%B4%EC%9E%AC%ED%95%98%EB%8A%94%EC%A7%80%20%ED%99%95%EC%9D%B8%ED%95%98%EB%8A%94%20%ED%81%AC%EB%A1%9C%EC%8A%A4%20%ED%94%8C%EB%9E%AB%ED%8F%BC(Linux%2C%20BSD%2C%20Solaris)%20%EB%B0%A9%EB%B2%95.png)
특정 PID를 가진 프로세스가 실행 중인지 확인하는 안정적인 크로스 플랫폼 방법을 찾고 있습니다. 두 가지 가능한 솔루션이 나타났습니다.
kill -0 $PID
— 종료 상태는 프로세스가 존재하는 경우 0, 존재하지 않는 경우 1입니다. 그러나 종료하기 위해 추가 권한이 필요한 PID의 경우에도 1을 반환합니다.ps a | grep "^\s*${PID}"
그리고 그런 것들은 추악합니다.
#1과 같은 것을 소유자 제한 없이 가질 수 있는 방법이 있습니까?
답변1
작은 C 프로그램을 작성할 수 있나요? kill(2)
UID에 지정된 프로세스에 신호를 보낼 수 있는 권한이 없으면 시스템 호출은 -1을 반환하지만 존재하지 않는 PID에 대한 것이 아니라 이 경우 errno
-1로 설정됩니다 . 저는 이를 Solaris, HP-UX, Linux 및 *BSD 간에 이식 가능하게 만들 수 있다고 확신합니다. 각 플랫폼별로 컴파일해야 합니다.EPERM
ESRCH