명령을 실행 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