vi
임의의 프로세스(예: )에서 실행 중인 인스턴스가 수천 개 이상 있다고 가정해 보겠습니다 . 한 번의 히트/라인/명령으로 어떻게 모두 죽일 수 있습니까?
답변1
그 좋은 노인에게 무슨 일이 일어났나요?
for pid in $(ps -ef | grep "some search" | awk '{print $2}'); do kill -9 $pid; done
효율성을 높이는 방법도 있지만,
for pid in $(ps -ef | awk '/some search/ {print $2}'); do kill -9 $pid; done
및 기타 변형이 있지만 기본 수준에서는 항상 나에게 효과적입니다.
답변2
킬올을 사용하세요.
killall vi
이렇게 하면 "vi"라는 이름의 모든 명령이 종료됩니다.
SIGKILL과 같은 신호를 추가할 수도 있습니다.
killall -9 vi
답변3
pkill
이것이 가능하다면 제가 추천하고 싶은 것입니다(리눅스,FreeBSD,네트워크BSD,오픈BSD,솔라리스). 명령 이름, 전체 명령줄 또는 기타 기준으로 프로세스를 지정할 수 있습니다. 예를 들어 pkill vi
명령 이름에 하위 문자열이 포함된 모든 프로그램을 종료합니다 vi
. 호출 프로세스만 종료하려면 vi
를 사용하십시오 pkill -x vi
. vi
마지막 인수로 끝나는 프로세스 만 종료하려면 .conf
를 사용하십시오 pkill -fx 'vi.*\.conf'
.
pkill
신호가 전송될 PID 목록을 보려면 pgrep
신호 이름이나 번호를 허용하지 않는다는 점을 제외하면 구문이 정확히 동일한 을 사용하십시오. 이러한 프로세스에 대한 자세한 내용을 보려면 다음을 실행하세요.
ps -p "$(pgrep …)"
Linux에서는 다음으로 변경해야 합니다 ps -p $(pgrep -d, …)
(이것은 버그입니다. Linux는 ps
POSIX와 호환되지 않습니다).
종료할 프로세스를 식별하는 또 다른 일반적인 방법은 일부 파일이 열려 있는 프로세스(프로세스의 실행 파일일 수 있음)입니다. 다음을 나열할 수 있습니다.fuser
fuser -k
; 신호를 보내는 데 사용됩니다 . 예를 들어 fuser -k /usr/bin/find
실행 중인 모든 인스턴스를 종료합니다 find
.
계속 포크하는 런어웨이 프로세스가 있는 경우 전체 프로세스를 종료해야 할 수도 있습니다.프로세스 그룹즉시. 프로세스 그룹은 그룹 내 모든 프로세스의 조상 프로세스인 리더의 음수로 식별됩니다. 프로세스가 속한 프로세스 그룹을 보려면 실행 ps -o pgid
(표시할 프로세스를 선택하기 위한 옵션 포함)을 실행하세요. 프로세스 그룹 리더 1234와 모든 하위 프로세스를 종료하려면 다른 신호를 실행 kill -1234
하세요 .kill -HUP -1234
더 나은 방법을 찾을 수 없으면 적절한 옵션을 사용하여 모든 프로세스를 나열하고 ps
다른 텍스트 필터링 명령을 사용하여 필터링하십시오. grep
비슷한 이름이나 해당 이름이 포함된 인수를 사용하여 명령을 실행하는 다른 프로세스와 실수로 일치하지 않도록 주의하세요. 예를 들어:
kill $(ps -o pid -o comm | awk '$2 == "vi" {print $1}')
grep
또는 awk
명령 자체가 출력에 나열될 수 있다는 점을 명심하십시오 ps
( ps
필터 명령은 병렬로 실행되므로 표시 여부는 타이밍에 따라 다릅니다). 이는 명령 매개변수가 출력에 포함된 경우 ps
특히 중요합니다 .
답변4
pkill
여기가 좋아요. 패턴을 다듬기 위해 많은 매개변수를 제공할 수 있습니다.