Process ID (PID) 는 lsofkill 등의 프로세스 관련 명령어를 사용할 때 필수 옵션입니다.


시스템을 운영하다 보면 fork-exec 으로 묶인 부모 자식 관계를 가진 여러 프로세스들의 ID 가 필요한 경우가 있습니다.

예로 apache httpd 를 실행하면 동일한 이름으로 여러 프로세스가 생기는 데 httpd 라는 이름을 가진 모든 프로세스 ID 를 가져오고 싶지만 실행중인 프로세스 정보를 표시하는 ps 명령어는 이름으로 PID 를 가져오는 기능이 없습니다.


이럴 때 pidof 명령어를 사용하면 이름으로 PID 를 가져올 수 있으며 사용법은 pidof 명령어 뒤에 PID 를 가져올 이름을 주면 됩니다.

예로 아래는 현재 실행한 nginx 프로세스의 모든 PID 를 출력하며 5 개의 PID 가 출력되므로 nginx 가 5개 실행된 것을 알수 있습니다.

$ pidof nginx

27007 27006 27005 27004 27003
BASH

아래는 현재 시스템에서 실행한 bash 의 프로세스 ID 를 출력합니다.

$ pidof bash

16126 15927
BASH

pidof 명령어는 ps 와 awk 를 조합해서 다음과 같이 만들 수 있습니다. 예로 다음은 bash 의 모든 PID 를 출력합니다.

ps -eaf | grep bash | grep -v grep | awk '{print $2}'
BASH


하나의 pid 만 리턴

-s 옵션을 주면 하나의 pid 만 리턴합니다.

$ pidof -s nginx

27007
BASH


script 실행하는 pid 정보

shell 이나 의 경우 스크립트를 실행하는 경우가 많은데 -x 옵션 뒤에 스크립트 명을 주면 특정 스크립트를 실행하는 shell 의 pid 정보만 얻을 수 있습니다. 예로 다음은 run.sh 를 실행하는 PID 를 출력합니다.

$ pidof -x run.sh
104946
BASH

-x 옵션을 사용할 경우 bash run.sh 처럼 실행한 경우 출력되지 않으며 ./run.sh 같이 실행해야 합니다.


활용

kill 과 연결

pidof 로 가져온 모든 프로세스 ID 에 kill 로 시그널을 전송할 수 있습니다.

kill -INT "$(pidof httpd)"
BASH


같이 보기