Linux/Linux_technic

ps에서 pid 목록만 가져와서 kill하기 [GAWK]

sosal 2015. 5. 17. 21:17
반응형

 

/*

 http://sosal.kr/
 * made by so_Sal
 */

 

1. 원하는 프로세스 목록만 가져오기 - ps, grep

2. 프로세스 목록에서 pid만 가져오기 - AWK (GAWK)

3. kill 명령어로 한번에 프로세스 종료하기

4. Shell script를 이용하여 한번에 종료하기

 

작업할게 많아서 R이라는 프로그램을 거의 40개 가량 돌려야 할 때가 있었습니다.

근데 하나 실수한게 있어서 이 40개나 되는 프로세스를 다 죽여야하게 됐는데,

nohup 백그라운드로 실행시키는 바람에 kill이라는 명령어로 하나 하나 다 따로 죽여야 하는 상황이 됐네요.

 

Fig.1 ps -elf | grep sosal | grep exec

(스압 --;)

 

 

1. 원하는 프로세스 목록만 가져오기 - ps, grep

 

40개를 하나하나 프로세스 아이디(pid)를 다 치기에는 너무 귀찮으니 pid 목록만 뽑아와서 한번에 다 kill 할 수 있도록 해봤습니다.

 

일단 ps -elf 명령어를 grep으로 sosal과 exec가 모두 포함된, 제가 kill 하고자 하는 프로세스 목록만 뽑았습니다.
그 명령어가 ps -elf | grep sosal | grep exec 이지만, 혹시 중요한 프로세스가 켜져있는 경우 pid가 뽑히면 안되니,

추가적으로 grep으로 중요한 프로세스를 제거해주시면 됩니다.

 

 


 

2. 프로세스 목록에서 pid만 가져오기 - AWK (GAWK)

우리가 원하는 결과는 fig1과 같은 결과에서 4번째 column(열)이기 때문에, 이것을 가져오는 스크립트 언어가 필요합니다.

 

- n번째 column만 가져오려면 다음과 같이 입력하면 됩니다.

ps ~ | awk '{print $n}'

 

Fig.2 ps 명령어 결과의 1~5번째 column 가져오기

ps -elf | grep sosal | grep exec | awk '{print $1,$2,$3,$4,$5}'

 

 

3. kill 명령어로 한번에 프로세스 종료하기

 

ps -elf | grep sosal | grep exec | awk '{print $3,$4}' 명령어로 제 id와 pid 목록만 가져와봤습니다.

 

Fig 3. ps & awk 명령어로 id와 pid만 가져오기

 

 

그리고 메모장이나 다른 텍스트 편집기에서 '바꾸기' 기능을 이용하여 sosal을 kill로 바꿔주시면 됩니다.

 

 

 

 

모든 kill 명령어를 이제 리눅스 콘솔에 붙여넣으면 끝 ^^

 

 

 

 

 

 

4. Shell script를 이용하여 한번에 종료하기

 

ps -elf | grep "프로세스 목록 추출" | awk '{print $4}' | while read line; do kill $line; done

 

위의 과정이 귀찮고 grep으로 원하는 프로세스 목록만 추출할 수 있다면 위의 명령어로 쉽게 해결가능합니다 ^^