본문 바로가기
Shell

특정 조건을 만족하는 여러 프로세스 한 번에 죽이기

by 메릴린 2023. 3. 17.
728x90

시뮬레이션을 돌리게 될 경우 많은 수의 노드들을 여러 조건으로 돌려 비교해봐야 하기 때문에 일일이 실험을 진행할 경우 굉장히 시간이 오래 소요된다.

따라서 python의 multiprocess와 shell script를 이용해 한 번에 실험 파일을 실행하는 경우가 많다.

이럴 때 가끔 변수 설정을 잘못해서 실행한 프로세스를 모두 죽이고 다시 실행해야 하는 경우가 있어 해당 프로세스들을 찾아 한 번에 kill 하는 방법을 정리해본다.

방법

kill -9 `ps -ef | grep '문자열' | grep -v grep | awk '{print $2}'`

여러 프로세스 죽이기

kill -9 id1 id2 id3 ...

여러 프로세스를 한 번에 죽일 때는 대상이 되는 프로세스 ID를 나열해주면된다.

grep ‘문자열’

먼저 어떤 문자열 포함한 프로세스를 죽일지 작성해준다.

예를 들어, 내가 실행한 test.py 를 포함한 모든 processes를 죽이고 싶다면 grep “python3 test.py” 로 작성해주면 된다.

두 개 이상의 조건을 모두 만족해야 하는 경우 (AND)

grep 조건1 | grep 조건2 ...

파이프 라인으로 이어주면 된다.

두 개 이상의 조건에 대해 검색하고 싶을 경우 (OR)

1. “|” 사용

grep "조건1\|조건2"

→ or 연산자를 의미하기도 하는 “|”를 조건 사이에 붙여준다. 단, 역슬래쉬()를 이용해 이를 알린다.

2. egrep 이용

egrep '(조건1|조건2)'

→ 괄호와 작은 따옴표를 이용해 조건을 묶어준다.

grep -v grep

-v 옵션은 뒤따라오는 입력값을 포함하는 프로세스를 제외하겠다는의미이다.

grep 문을 실행하게 되면 해당 명령어도 잡혀서 출력되는데 첫번째 grep "$cmd" 에서 grep 문이 같이 잡힐 수도 있다.

따라서 이 실행문을 제외하고 실행할 수 있게 조건을 추가해주는 것이다.

awk ‘{print $2}’

뒤에 이어진 명령어의 수행 결과를 출력해주는 awk 명령어를 이용해 앞의 모든 조건들을 만족하는 PID를 가져온다. 이에 대한 자세한 설명은 다음 참고문헌 참고 (참고)

  • 앞의 조건들의 모든 결과값에 대해 “print $2”라는 action을 취한다.
  • $2는 필터링된 ps -ef의 결과의 2번째 argument를 가져오는데 이 값이 바로 PID이다.

reference

728x90
반응형

댓글