주어진 이름을 가진 모든 프로세스를 종료하는 방법은 무엇입니까?

주어진 이름을 가진 모든 프로세스를 종료하는 방법은 무엇입니까?

명령을 실행 ps -A | grep <application_name>하고 다음과 같은 프로세스 목록을 얻습니다.

19440 ?        00:00:11 <application_name>
21630 ?        00:00:00 <application_name>
22694 ?        00:00:00 <application_name>

목록에 있는 모든 프로세스를 종료하고 싶습니다: 19440, 21630, 22694.

나는 이것을 시도했지만 ps -A | grep <application_name> | xargs kill -9 $1오류가 발생합니다.

kill: illegal pid ?
kill: illegal pid 00:00:00
kill: illegal pid <application_name>

어떻게 해야 이 일을 우아하게 할 수 있나요?

답변1

pkill -f 'PATTERN'

이 패턴과 일치하는 모든 프로세스가 종료됩니다 PATTERN. 이 -f옵션을 사용하면 전체 명령줄(즉, 인수 포함)이 고려됩니다. 이 옵션이 없으면 -f명령 이름만 고려됩니다.

또한 man pkill시스템을 참조하십시오.

답변2

문제는 ps -A | grep <application_name> | xargs -n1다음과 같은 출력을 반환한다는 것입니다.

19440
?
00:00:11
<application_name>
21630
?
00:00:00
<application_name>
22694
?
00:00:00
<application_name>

당신은 그것을 사용할 수 있습니다awk먼저 ps출력 열을 가져옵니다..

ps -A | grep <application_name> | awk '{print $1}' | xargs -n1

PID 목록을 반환합니다.

19440
21630
22694

kill -9 $1모든 PID를 종료하는 명령 추가

ps -A | grep <application_name> | awk '{print $1}' | xargs kill -9 $1

답변3

killall이것은 가능합니다.

$ killall application_name

답변4

프로세스 이름을 놓치지 않기 위해 -w플래그를 사용하여 광범위한 출력을 캡처했습니다.ps

ps auxww | grep -E "[a]pplication_name" | awk '{print $2}'

PID 목록을 반환합니다.

7644
407
406

다음으로, 유효한 출력이 있으면 결과를 xargs kill -9명령으로 연결하여 해당 PID를 모두 종료합니다.

ps auxww | grep -E "[a]pplication_name" | awk '{print $2}' | ifne xargs kill -9

관련 정보