본문 바로가기
개발 이야기/Linux

리눅스_명령어 kill, ps, grep, awk 함께 사용하기

by 농개 2019. 4. 18.

회사에서 일을 하다 보면 반복 작업이 생깁니다. 예를 들어 아래와 같은 작업이 있다고 가정해봅시다.

 

  • 특정 서비스(프로세스)를 강제로 내린다.

위 작업은 매우 간단합니다.

해당 프로세스의 PID를 찾아서 kill 명령어로 강제 종료합니다.

 

PID는 매번 서비스를 올릴 때마다 바뀝니다. 그렇기에 보통은 아래와 같은 방식으로 위 작업을 수행합니다.

(서비스가 nodejs로 구성 됬다면)

jckang@jckang:~/nba_react/nba-app$ ps -ef | grep node
jckang    3582  3581  0 22:01 pts/6    00:00:00 node /home/jckang/nba_react/nba-app/node_modules/.bin/react-scripts start
jckang    3589  3582  1 22:01 pts/6    00:00:13 node /home/jckang/nba_react/nba-app/node_modules/react-scripts/scripts/start.js
jckang   29776 13697  0 22:18 pts/2    00:00:00 grep --color=auto node
jckang@jckang:~/nba_react/nba-app$ kill -9 3582 3589

 명령어에 대해서 간단히 설명하자면

  • ps -ef  :  현재 실행 중인 프로세스를 표시합니다.
  • grep node  :  node라는 문자열이 포함된 라인(행)을 출력합니다.

위 두 가지 명령어를 함께 썼으니 현재 실행 중인 프로세스를 표시하는데 node라는 문자열이 포함된 행을 출력시키는 것입니다.

 

  • kill -9 3582 3589  :  3582, 3589라는 PID를 가진 프로세스를 강제로 죽입니다(-9 : 강제 죽이기)

이 후 다시 ps 명령어로 확인해보면

jckang@jckang:~/nba_react/nba-app$ !ps
ps -ef | grep node
jckang   29782 13697  0 22:20 pts/2    00:00:00 grep --color=auto node

 

프로세스가 죽은걸 확인 할 수 있습니다.

위 작업을 한줄의 명령어로 하려면?

jckang@jckang:~/nba_react/nba-app$ kill -9 $(ps -ef | grep node | awk '{print $2}')

 

  • kill -9 $(ps -ef | grep node | awk '{print $2}')

위 명령어 한줄이면 Pid를 확인하고 일일이 타이핑해서 프로세스를 죽일 필요없습니다.

$()라는 표현식은 리눅스 터미널에서 사용할 수 있으며, 안에 포함된 명령어를 kill 명령어보다 우선 실행 시킵니다.

`(back quote)로 대체 하여 사용 가능합니다.

awk '{print $2}' 는 표준출력으로 부터 2번째 필드를 출력합니다.