이름으로 모든 프로세스를 종료하는 명령

이름으로 모든 프로세스를 종료하는 명령

Gunicorn이라는 여러 프로세스가 실행 중입니다.

ubuntu   23884  0.0  7.1 190092 71980 ?        S    Sep10   0:01 gunicorn: worker [ll1]
ubuntu   23885  0.0  6.8 187120 69128 ?        S    Sep10   0:01 gunicorn: worker [ll1]
ubuntu   23886  0.0  7.1 189800 71712 ?        S    Sep10   0:01 gunicorn: worker [ll1]

나는 gunicorn이라는 이름으로 모든 프로세스를 종료하고 싶습니다. 현재 이 스크립트를 통해 한 번에 하나의 프로세스만 종료할 수 있습니다.

#!/bin/bash
pid=`ps ax | grep gunicorn | awk '{split($0,a," "); print a[1]}' | head -n 1`
echo $pid
kill $pid
echo "killed gunicorn"

답변1

pkill -f gunicorn
echo "killed gunicorn"

그러면 해당 이름을 가진 모든 프로세스가 종료되고 메시지가 gunicorn인쇄됩니다 .killed gunicorn

답변2

보내려는 신호와 함께 kill all 명령을 사용할 수 있습니다.

killall -<signal> gunicorn

-v를 사용하여 수행 중인 작업에 대한 자세한 정보를 출력할 수도 있습니다.

killall -v -<signal> gunicorn

또는 이전과 같은 스크립트를 사용하여 다음을 수행할 수 있습니다.

#!/bin/bash

for pid in `pidof gunicorn`; do 
    kill -<signal> $pid;
    echo "killed gunicorn [$pid]"; 
done

<신호>:

여기에 이미지 설명을 입력하세요.

답변3

이를 수행하는 방법은 여러 가지가 있지만 제가 아는 주요 두 가지 방법에 중점을 두겠습니다.

사용 psxargs

그리고 grep:

ps -ef | grep '<pattern>' | grep -v grep | awk '{print $2}' | xargs -r kill -9

그리고 awk:

ps -ef | awk '/<pattern>/ && !/awk/ {print $2}' | xargs -r kill -9

이 명령은 명령과 일치하는 모든 프로세스를 종료합니다.<pattern>

따라서 스크립트는 다음과 같습니다.

#!/bin/bash
ps -ef | grep 'gunicorn' | grep -v grep | awk '{print $2}' | xargs -r kill -9

[ $? -eq 0 ] && echo 'killed gunicorn'

또는,

#!/bin/bash
ps -ef | awk '/gunicorn/ && !/awk/ {print $2}' | xargs -r kill -9

[ $? -eq 0 ] && echo 'killed gunicorn'

사용 psfor

for pid in `ps ax | grep '<pattern>' | awk ' { print $1;}'`; do 
  kill -9 $pid
done

이것은 또한 관련된 모든 것을 죽일 것입니다<pattern>

따라서 스크립트는 다음과 같습니다.

#!/bin/bash

for pid in `ps ax | grep 'gunicorn' | awk ' { print $1;}'`; do 
  kill -9 $pid
done

[ $? -eq 0 ] && echo 'killed gunicorn'

관련 정보