이름으로 process id 를 가져오는 pidof 명령어 사용법
Process ID (PID) 는 lsof 나 /wiki/spaces/LINC/pages/887423478등의 프로세스 관련 명령어를 사용할 때 필수 옵션입니다.
시스템을 운영하다 보면 fork-exec 으로 묶인 부모 자식 관계를 가진 여러 프로세스들의 ID 가 필요한 경우가 있습니다.
예로 apache httpd 를 실행하면 동일한 이름으로 여러 프로세스가 생기는 데 httpd 라는 이름을 가진 모든 프로세스 ID 를 가져오고 싶지만 /wiki/spaces/LPT/pages/887554398는 이름으로 PID 를 가져오는 기능이 없습니다.
이럴 때 pidof 명령어를 사용하면 이름으로 PID 를 가져올 수 있으며 사용법은 pidof 명령어 뒤에 PID 를 가져올 이름을 주면 됩니다.
예로 아래는 현재 실행한 nginx 프로세스의 모든 PID 를 출력하며 5 개의 PID 가 출력되므로 nginx 가 5개 실행된 것을 알수 있습니다.
$ pidof nginx 27007 27006 27005 27004 27003
아래는 현재 시스템에서 실행한 bash 의 프로세스 ID 를 출력합니다.
$ pidof bash 16126 15927
pidof 명령어는 ps 와 awk 를 조합해서 다음과 같이 만들 수 있습니다. 예로 다음은 bash 의 모든 PID 를 출력합니다.
ps -eaf | grep bash | grep -v grep | awk '{print $2}'
하나의 pid 만 리턴
-s 옵션을 주면 하나의 pid 만 리턴합니다.
$ pidof -s nginx 27007
script 실행하는 pid 정보
shell 이나 의 경우 스크립트를 실행하는 경우가 많은데 -x 옵션 뒤에 스크립트 명을 주면 특정 스크립트를 실행하는 shell 의 pid 정보만 얻을 수 있습니다. 예로 다음은 run.sh 를 실행하는 PID 를 출력합니다.
$ pidof -x run.sh 104946
-x 옵션을 사용할 경우 bash run.sh 처럼 실행한 경우 출력되지 않으며 ./run.sh 같이 실행해야 합니다.
활용
kill 과 연결
pidof 로 가져온 모든 프로세스 ID 에 kill 로 시그널을 전송할 수 있습니다.
kill -INT "$(pidof httpd)"