ps와 grep으로 pid를 조회하여 프로세스 종료(kill)
pid로 프로세스를 종료하는 방법을 정리합니다. 사용하는 명령은 다음과 같습니다.
- ps
- grep
- awk
- kill
pid를 조회하여 프로세스 종료하는 명령은 다음과 같은 절차로 작성됩니다.
- 원하는 프로세스 목록만 가져오기 - ps, grep, pgrep(ps+grep)
- 프로세스 목록에서 pid만 가져오기 - awk
- kill 명령어로 한번에 프로세스 종료 - ``(backtick)
backtick은 다음 그림과 같은 위치의 문자를 의미합니다.
프로세스 목록 조회
ps 및 grep 명령을 대상 프로세스를 조회합니다.
ps -ef|grep hugo
501 6582 479 0 12:39AM ttys000 0:01.15 hugo server
501 6919 479 0 12:44AM ttys000 0:00.21 hugo server
501 7011 479 0 12:44AM ttys000 0:01.16 hugo server
501 7104 479 0 12:44AM ttys000 0:01.16 hugo server
501 7276 479 0 12:44AM ttys000 0:01.15 hugo server
501 7371 479 0 12:44AM ttys000 0:01.16 hugo server
501 7463 479 0 12:44AM ttys000 0:01.14 hugo server
501 7637 479 0 12:45AM ttys000 0:00.00 grep --color=auto --exclude-dir=.bzr --exclude-dir=CVS --exclude-dir=.git --exclude-dir=.hg --exclude-dir=.svn hugo
프로세스 목록에서 pid 출력
awk로 프로세의 정보를 출력합니다. 컬럼 지정은 작은 따움표로 설정합니다.
> ps -ef|grep hugo|awk '{print $1,$2,$3,$8}'
501 6582 479 hugo
501 6919 479 hugo
501 7011 479 hugo
501 7104 479 hugo
501 7276 479 hugo
501 7371 479 hugo
501 7463 479 hugo
501 7903 479 grep
>
두 번째 컬럼($2)으로 pid를 지정하여 출력합니다.
> ps -ef|grep hugo|awk '{print $2}'
6582
6919
7011
7104
7276
7371
7463
7952
>
프로세스 종료
쉡 스크립트에서 backtick(`) 사이의 명령은 실행되고 그 결과가 앞에 명령에 입력됨니다. 다름과 같이 pid는 kill 명령에 전달되어 종료됩니다.
>kill -9 `ps -ef|grep hugo|awk '{print $2}'`
kill: kill 8385 failed: no such process
[7] + 7463 killed hugo server
[6] + 7371 killed hugo server
[5] + 7276 killed hugo server
[4] + 7104 killed hugo server
[3] + 7011 killed hugo server
[2] + 6919 killed hugo server
[1] + 6582 killed hugo server
>
pgrep
ps와 grep 명령을 결합한 pgrep 명령을 이용하면 스크립트를 간단하게 만들 수 있습니다.
> pgrep -f hugo
8438
8530
8663
8755
8887
9020
> kill -9 `pgrep -f hugo`
[6] + 9020 killed hugo server
[5] + 8887 killed hugo server
[4] + 8755 killed hugo server
[3] + 8663 killed hugo server
[2] + 8530 killed hugo server
[1] + 8438 killed hugo server