Programing

PID 대신 이름으로 프로세스를 종료하려면 어떻게해야합니까?

lottogame 2020. 3. 9. 08:05
반응형

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는 자체 문제를 해결하는 것입니다 . 이것은 기본 명령을 방해합니다. 전자의 기능이 후자의 기능보다 유용하면 다음 을 호출 하여 버전을 비활성화 할 수 있습니다killkill %1bash

enable -n kill

추가 정보 참조 killenable항목 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

반응형