"for i in" 루프에서 사용하기 위해 "pgrep"를 사용하여 "ps -ef"를 에뮬레이션합니다.

"for i in" 루프에서 사용하기 위해 "pgrep"를 사용하여 "ps -ef"를 에뮬레이션합니다.

우분투16.04

나는 이 명령줄을 사용하여 명령과 일치하는 모든 프로세스를 종료하는 데 익숙합니다.

for i in $(ps -ef | grep COMMAND | awk '{ print $2 }'); do kill -9 "$i" &>/dev/null;done

shellcheck는 그것을 너무 좋아하지 않고 제안합니다

root@singa /home # shellcheck run

In run line 4:
for i in $(ps -ef | grep COMMAND | awk '{ print $2 }'); do kill -9 "$i" &>/dev/null;done
           ^-- SC2009: Consider using pgrep instead of grepping ps output.

XXX를 대체하기 위해 이를 수행하려면 어떤 플래그가 필요합니까?

for i in $(pgrep XXX | grep COMMAND | awk '{ print $2 }'); do kill -9 "$i" &>/dev/null;done

pgrep에 대한 매뉴얼 페이지를 확인했습니다.

답변1

for pid in $(pgrep command); do
    kill -9 $pid
done

또는 더 나은 방법은 다음과 같습니다.

pkill -9 command

그런데 무관심한 사용은 kill -9때때로 좀비 발생, 고아 파일, 영구 임시 파일 및 기타 질병으로 이어질 수 있습니다. 대신 kill기본 전송을 사용하는 것을 고려해 보십시오 .SIGTERMSIGKILL

답변2

나는 다음과 같은 방법을 수행했습니다

for i in pickup hald-runner; do pgrep $i | awk '{print "kill" " "  $1}'| sh;done

여기서 픽업, 홀드러너는 프로세스 이름입니다.

관련 정보