주어진 이름으로 모든 프로세스를 죽이는 방법?


16

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

어떻게하면 정상적으로이 작업을 수행 할 수 있습니까?

답변:


25
pkill -f <application_na>

<application_na>이름에 패턴이 포함 된 모든 프로세스를 종료합니다 .

남자 pkill


9

문제는 다음 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

이것은 내가 bash 스크립트에서 그것을 테스트하는 것이 완벽합니다. 프로세스를 오류없이 즉시 죽입니다. + 프로세스가 시작되지 않았어도 원하는 오류가 표시되지 않습니다 (여기서는 ffmpeg processer killer의 예) nano /usr/bin/ffmpegk . . . . ps -A | grep ffmpeg | awk '{print $1}' | xargs kill -9 $1 . . . . chmod a+rx /usr/bin/ffmpegk
Salem F

kill -9일치하는 프로세스가없는 경우 출력을 얻는 데 문제가 있습니다.
Daniel F

1
대신에 이름을 일치시키는 데 grep사용해야합니다 awk.ps -A | awk "\$4 == \"$1\" { print \$1; }"
Toby Speight

0

killall 그렇게 할 수 있습니다.

$ killall application_name

응용 프로그램 이름에 정규식을 허용하는 킬이 모두 있습니까?
Łukasz D. Tulikowski

killall --regexp "appl.*me"다른 killall 구현이있을 수 있지만. 참조하십시오 man killall.
rudimeier

killall 충분하지 않은 경우가 종종 있습니다. 프로세스를 죽이려면 세 번 보내야하며 프로세스를 죽이는데도 실패하는 유일한 해결책 kill -9 pid은 @ ŁukaszD입니다. Tulikowski는 특별히 bash 스크립트에 가장 적합한 솔루션이라고 생각합니다.
Salem F

-1
ps -eaf | grep -i applicationname| grep -iv 'grep'| awk '{print "kill -9" " "  $2}'|sh

이 질문에 아직 투표하지 않았지만, 이것이 왜 다른 솔루션과 다른지 또는 그와 매우 유사한 지 설명하지 않았거나 OP와 그 변형에 문제가있는 이유를 설명하지 않았습니다.
Jeff Schaller

-2

내 접근 방식은 @와 유사합니다 Łukasz D. Tulikowski. 대신에 grep <application_name>; 내가 사용하고 grep "[a]pplication_name"자체 프로세스 명령 줄 일치하지 않는다.

대괄호 표현식은 grep의 문자 클래스 패턴 일치의 일부입니다 . (참고) .


awk먼저 ps출력 열을 얻는 데 사용할 수 있습니다 .

ps -A | grep "[a]pplication_na" | awk '{print $2}' | xargs -n1

PID 목록을 반환합니다

7644
407
406

나중에 추가 kill -9 $1하면 모든 PID를 죽이는 명령이 있습니다.

ps aux | grep "[a]pplication_na" | awk '{print $2}' | xargs kill -9 $1

테스트를보다 정확하게 수행하기 위해 grep대신에 왜 awk? grep예를 들어 대상을 하위 문자열로 포함하는 이름과 일치합니다.
Toby Speight
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.