PID 대신 이름으로 프로세스를 종료하려면 어떻게해야합니까?
때때로 Firefox를 시작하려고하면 "Firefox 프로세스가 이미 실행 중입니다"라고 표시됩니다. 그래서 나는 이것을해야합니다 :
jeremy@jeremy-desktop:~$ ps aux | grep firefox
jeremy 7451 25.0 27.4 170536 65680 ? Sl 22:39 1:18 /usr/lib/firefox-3.0.1/firefox
jeremy 7578 0.0 0.3 3004 768 pts/0 S+ 22:44 0:00 grep firefox
jeremy@jeremy-desktop:~$ kill 7451
내가 원하는 것은 나를 위해 모든 것을 할 명령입니다. 입력 문자열과 grep
프로세스 목록에서 (또는 무엇이든) 가져 와서 출력의 모든 프로세스를 종료합니다.
jeremy@jeremy-desktop:~$ killbyname firefox
PHP에서 시도했지만 PHP 스크립트 자체에서 exec('ps aux')
실행 된 프로세스 만 표시하는 것 같습니다 exec()
(따라서 표시되는 유일한 프로세스는 자체입니다).
pkill firefox
자세한 정보 : http://linux.about.com/library/cmd/blcmdl1_pkill.htm
사용 가능 :
pkill -f "Process name"
.
나를 위해, 그것은 완벽하게 일했습니다. 내가 찾던 것이 었습니다. pkill은 플래그가없는 이름으로 작동하지 않습니다.
되면 -f
설정된 전체 명령 라인 패턴 매칭에 사용된다.
당신은 이름 으로 프로세스를 죽일 수 있습니다killall <name>
killall 은 지정된 명령을 실행하는 모든 프로세스에 신호를 보냅니다. 신호 이름을 지정하지 않으면 SIGTERM이 전송됩니다.
신호는 이름 (예 : -HUP 또는 -SIGHUP ) 또는 번호 (예 : -1 ) 또는 옵션 -s 로 지정할 수 있습니다 .
명령 이름이 정규식이 아니고 (옵션 -r ) 슬래시 (/)를 포함하는 경우 해당 파일을 실행하는 프로세스는 해당 이름과 관계없이 종료를 위해 선택됩니다.
그러나 프로세스가 표시되지 않으면 프로세스 ps aux
를 죽일 권리가 없을 것입니다 ...
조금 더 긴 대안 :
kill `pidof firefox`
가장 쉬운 방법은 먼저 올바른 프로세스 ID를 얻는 지 확인하는 것입니다.
pgrep -f [part_of_a_command]
결과가 예상대로 인 경우. 함께 가다 :
pkill -f [part_of_a_command]
이상하지만 다음과 같은 해결책을 보지 못했습니다.
kill -9 `pidof firefox`
또한 다음과 같은 여러 프로세스 (여러 pid)를 죽일 수 있습니다.
kill -9 `pgrep firefox`
pidof
단일 라인 출력이 있기 때문에 선호 합니다.
> pgrep firefox
6316
6565
> pidof firefox
6565 6316
Mac에서는 pgrep을 찾을 수 없었고 pkill도 작동하지 않았으므로 간단한 하나의 라이너 스크립트를 작성했습니다.
export pid=`ps | grep process_name | awk 'NR==1{print $1}' | cut -d' ' -f1`;kill $pid
이 작업을 수행하는 더 쉬운 방법이 있다면 공유하십시오.
#killall
명령 사용 :
#killall -9 <processname>
snippet
시작 경로에있는 모든 프로세스를 종료하십시오 . / directory /를 스 니펫으로 지정하여 일부 디렉토리에서 시작한 모든 앱을 종료 할 수 있습니다. 이것은 동일한 응용 프로그램 디렉토리에서 동일한 응용 프로그램에 대한 여러 구성 요소를 시작할 때 매우 유용합니다.
ps ax | grep <snippet> | grep -v grep | awk '{print $1}' | xargs kill
* 가능한 경우 pgrep를 선호합니다
grep으로 죽이려면 :
kill -9 `pgrep myprocess`
더 정확한 것은 다음과 같습니다.
export pid=`ps aux | grep process_name | awk 'NR==1{print $2}' | cut -d' ' -f1`;kill -9 $pid
나는 일반적으로 killall 명령을 사용합니다 . 자세한 내용 은 여기 를 참조하십시오.
나는 나 자신에게 같은 질문을했지만 현재 답변의 문제점은 그들이 죽일 프로세스를 안전하게 확인 하지 못 하기 때문에 끔찍한 실수로 이어질 수 있다는 것입니다 :) ... 특히 여러 프로세스가 패턴과 일치하는 경우 .
면책 조항으로, 나는 sh 전문가가 아니며 확실히 개선의 여지가 있습니다.
그래서 나는 작은 sh 스크립트를 썼습니다 :
#!/bin/sh
killables=$(ps aux | grep $1 | grep -v mykill | grep -v grep)
if [ ! "${killables}" = "" ]
then
echo "You are going to kill some process:"
echo "${killables}"
else
echo "No process with the pattern $1 found."
return
fi
echo -n "Is it ok?(Y/N)"
read input
if [ "$input" = "Y" ]
then
for pid in $(echo "${killables}" | awk '{print $2}')
do
echo killing $pid "..."
kill $pid
echo $pid killed
done
fi
기본 kill
명령은 PID 대신 명령 이름을 사용합니다. kill (1)을 참조하십시오 . 자주 발생하는 문제는 명령 이름이 아닌 작업 번호를 받아들이 bash
는 자체 문제를 해결하는 것입니다 . 이것은 기본 명령을 방해합니다. 전자의 기능이 후자의 기능보다 유용하면 다음 을 호출 하여 버전을 비활성화 할 수 있습니다kill
kill %1
bash
enable -n kill
추가 정보 참조 kill
및 enable
항목 bash는 (1) .
그놈을 실행하면 시스템 모니터 (시스템-> 관리-> 시스템 모니터)를 사용하여 Windows에서와 같이 프로세스를 종료 할 수 있습니다. KDE는 비슷한 것을 가질 것입니다.
ps aux | grep processname | cut -d' ' -f7 | xargs kill -9 $
kill -9 $ (ps aux | grep -e myprocessname | awk '{print $ 2}')
awk oneliner는 ps
출력 헤더를 구문 분석 하므로 열 번호 (그러나 열 이름)는 신경 쓰지 않아도됩니다. 정규식을 지원하십시오. 예를 들어, 경로가없는 실행 파일 이름에 "firefox"라는 단어가 포함 된 모든 프로세스를 종료하려면
ps -fe | awk 'NR==1{for (i=1; i<=NF; i++) {if ($i=="COMMAND") Ncmd=i; else if ($i=="PID") Npid=i} if (!Ncmd || !Npid) {print "wrong or no header" > "/dev/stderr"; exit} }$Ncmd~"/"name"$"{print "killing "$Ncmd" with PID " $Npid; system("kill "$Npid)}' name=.*firefox.*
참고 URL : https://stackoverflow.com/questions/160924/how-can-i-kill-a-process-by-name-instead-of-pid
'Programing' 카테고리의 다른 글
ArrayList를 되 돌리는 가장 간단한 방법은 무엇입니까? (0) | 2020.03.10 |
---|---|
모든 서브 뷰를 제거 하시겠습니까? (0) | 2020.03.10 |
jQuery-즉시 숨겨진 양식 요소 만들기 (0) | 2020.03.09 |
jQuery를 사용하여 HTML 요소가 비어 있는지 어떻게 확인합니까? (0) | 2020.03.09 |
C에서 선행 0을 인쇄합니까? (0) | 2020.03.09 |