vi
실행중인 프로세스 (예 :)의 인스턴스가 천 개 이상 있다고 가정 합니다. 하나의 단일 샷 / 한 줄 명령 / 하나의 명령으로 어떻게 모두 죽일 수 있습니까?
vi
실행중인 프로세스 (예 :)의 인스턴스가 천 개 이상 있다고 가정 합니다. 하나의 단일 샷 / 한 줄 명령 / 하나의 명령으로 어떻게 모두 죽일 수 있습니까?
답변:
좋은 노인의 문제
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
다른 변형이지만 기본 수준에서는 항상 나를 위해 일했습니다.
echo kill -9 $pid
어쨌든 나는 항상 그것을 처음 으로 실행 하므로 내가 얻는 것을 알 수 있습니다. 나는 pkill
빵과 버터 유닉스 인 AIX가 확실하지 않다 . 그리고 투표를하지 않는 것이 정말 좋지 않습니다.
csh
killall을 사용하십시오.
killall vi
이것은 'vi'라는 모든 명령을 죽입니다.
신호를 추가 할 수도 있습니다 (예 : SIGKILL)
killall -9 vi
killall -9 vi
killall
에서는 이름에서 알 수 있듯이 정확하게 init-process를 죽입니다.
pkill
가능한 경우 ( Linux , FreeBSD , NetBSD , OpenBSD , Solaris )를 권장 합니다. 명령 이름, 전체 명령 행 또는 기타 기준으로 프로세스를 지정할 수 있습니다. 예를 들어, pkill vi
명령 이름에 하위 문자열이 포함 된 모든 프로그램을 종료합니다 vi
. 라는 프로세스 만 종료하려면을 vi
사용하십시오 pkill -x vi
. 로 vi
끝나는 마지막 인수로 호출 된 프로세스 만 종료 .conf
하려면을 사용하십시오 pkill -fx 'vi.*\.conf'
.
pkill
신호를 보낼 PID 목록을 보려면를 사용 pgrep
하십시오. 신호 이름 또는 숫자를 허용하지 않는 것을 제외하고는 구문이 정확히 같습니다. 이러한 프로세스에 대한 자세한 정보를 보려면 다음을 실행하십시오.
ps -p "$(pgrep …)"
리눅스에서는 ps -p $(pgrep -d, …)
대신에 버그가있다 : 리눅스 ps
는 POSIX 호환이 아니다.
강제 종료 할 프로세스를 식별하는 또 다른 일반적인 방법은 특정 파일이 열려있는 프로세스 (프로세스 실행 파일 일 수 있음)입니다. 이것들을 fuser
;로 나열 할 수 있습니다 . fuser -k
그들에게 신호를 보내는 데 사용하십시오 . 예를 들어, fuser -k /usr/bin/find
실행중인 모든 isntance를 종료 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
출력에 포함되는 경우 특히 중요합니다 .
pkill
여기 아주 좋습니다. 패턴을 세분화하기 위해 많은 매개 변수를 제공 할 수 있습니다.
pkill
는 Linux, BSD 및 Solaris에서 사용할 수 있습니다. 그래서 그것보다 더 큰 확산이 killall
있습니다.
시도해 볼 것을 제안합니다 pkill
.
전의: ps -ef | pkill -f command
종료 될 모든 프로세스 목록을 표시하려면 먼저 다음을 시도하십시오 pgrep
.
전의: ps -ef | pgrep -f command
ps -ef
에 pkill
또는 pgrep
? 이 명령은 표준 입력에서 읽지 않습니다.
pkill
에서 사용procps
합니다.