UNIX에서 여러 프로세스를 빠르게 중지하는 방법
ps
/ top
, kill
.
프로세스 수가 많으면 쉘 스크립트를 사용합니다. 하나 또는 두 개의 유닉스 명령으로 이를 수행할 수 있는 다른 방법이 있습니까?
답변1
내 선택은pkill/pgrep
답변2
내가 사용하는 온라인 bash 스크립트는 다음과 같습니다.
ps auxwww | grep -v grep | grep -i $1 | awk '{print $2}' | xargs kill -9
이름에 첫 번째 매개변수가 포함된 모든 프로세스를 종료합니다(대소문자 구분 안 함). 각 섹션의 분류는 다음과 같습니다.
ps auxwww
매우 넓은 "명령" 필드를 사용하여 모든 프로세스를 인쇄합니다.grep -v grep
살인에서 제외됐나요?grep -i $1
첫 번째 인수를 포함하는 모든 줄과 일치합니다.awk '{print $2}'
모든 프로세스 ID 가져오기xargs kill -9
선택한 모든 프로세스 종료
답변3
Psdoom은 실제로 프로세스를 종료하는 유일한 방법입니다. http://psdoom.sourceforge.net/
답변4
저는 pgrep/pkill 명령을 사용하는 것을 선호합니다. 예는 다음과 같습니다.
[root@testrhel7 ~]# pgrep -l http
2967 httpd
2968 httpd
2969 httpd
2970 httpd
2971 httpd
2972 httpd
[root@testrhel7 ~]#
[root@testrhel7 ~]# pkill -e http
httpd killed (pid 2967)
httpd killed (pid 2968)
httpd killed (pid 2969)
httpd killed (pid 2970)
httpd killed (pid 2971)
httpd killed (pid 2972)
[root@testrhel7 ~]#
물론 for 루프를 사용할 수도 있습니다:
[root@testrhel7 ~]# ps -ef |grep http| grep -v grep
root 2989 1 0 16:06 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 2990 2989 0 16:06 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 2991 2989 0 16:06 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 2992 2989 0 16:06 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 2993 2989 0 16:06 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 2994 2989 0 16:06 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
[root@testrhel7 ~]#
[root@testrhel7 ~]# for i in $(ps -ef | awk '/http/ {print $2}'); do kill -9 $i; done
이것이 도움이 되기를 바랍니다. 행복한 살인이 되길 바랍니다.