programing

리눅스에서 어떻게 PID 대신 이름으로 프로세스를 죽일 수 있습니까?

powerit 2023. 5. 18. 21:32
반응형

리눅스에서 어떻게 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()PHP 스크립트 자체(따라서 표시되는 유일한 프로세스는 자체입니다.)

pkill firefox

더 많은 정보: http://linux.about.com/library/cmd/blcmdl1_pkill.htm

사용 가능:

pkill -f "Process name"

저는 완벽하게 잘 됐어요.그것이 제가 찾던 것이었습니다.pkill은 플래그가 없는 이름으로는 작동하지 않습니다.

-f이 설정되어 있으면 전체 명령줄이 패턴 일치에 사용됩니다.

다음을 사용하여 이름으로 프로세스를 죽일 수 있습니다.

killall은 지정된 명령을 실행하는 모든 프로세스에 신호를 보냅니다.신호 이름을 지정하지 않으면 SIGTERM이 전송됩니다.

신호는 이름(: -HUP 또는 -SIGUP) 또는 번호(예: -1) 또는 옵션 -s로 지정할 수 있습니다.

명령 이름이 정규식(옵션 -r)이 아니며 슬래시(/)를 포함하는 경우 해당 특정 파일을 실행하는 프로세스가 이름과 관계없이 선택되어 삭제됩니다.

하지만 만약 당신이 그 과정을 보지 못한다면.ps aux당신은 아마 그것을 죽일 권리가 없을 것입니다...

가장 쉬운 방법은 먼저 올바른 프로세스 ID를 확인하는 것입니다.

pgrep -f [part_of_a_command]

결과가 예상대로라면.다음 항목으로 이동:

pkill -f [part_of_a_command]

프로세스가 정체되어 요청을 수행할 수 없는 경우 kill을 사용할 수 있습니다.

kill -9 $(pgrep -f [part_of_a_command])

안전한 편에 서서 처음 시작한 프로세스만 종료하려면 추가-u 이름과 .

pkill -f [part_of_a_command] -u [username]

조금 더 긴 대안:

kill `pidof firefox`

시작 경로에 있는 모든 프로세스를 종료합니다./directory/를 스니펫으로 입력하기 위해 어떤 디렉토리에서 시작된 모든 앱을 죽일 수 있습니다.이 기능은 동일한 앱 디렉터리에서 동일한 응용 프로그램에 대한 여러 구성 요소를 시작할 때 매우 유용합니다.

ps ax | grep <snippet> | grep -v grep | awk '{print $1}' | xargs kill

가능하다면 pgrep을 원합니다.

이상하지만 이런 솔루션은 본 적이 없습니다.

kill -9 `pidof firefox`

또한 다음과 같은 여러 프로세스(복수 pid)를 죽일 수 있습니다.

kill -9 `pgrep firefox`

선호합니다pidof단일 라인 출력을 가지므로:

> pgrep firefox
6316
6565
> pidof firefox
6565 6316

사용.killall명령:

killall processname

사용하다-9또는-KILL프로그램을 강제로 죽입니다(옵션은 다음과 유사합니다).kill명령).

맥에서 나는 pgrep과 pkill을 찾을 수 없었고 둘 다 작동하지 않았기 때문에 간단한 라이너 스크립트를 작성했습니다.

export pid=`ps | grep process_name | awk 'NR==1{print $1}' | cut -d' ' -f1`;kill $pid

더 쉬운 방법이 있다면 공유해주세요.

그렙으로 죽이는 것:

kill -9 `pgrep myprocess`

더 정확한 것은 다음과 같습니다.

export pid=`ps aux | grep process_name | awk 'NR==1{print $2}' | cut -d' ' -f1`;kill -9 $pid

나는 보통 그것을 사용합니다.killall지휘권

명령에 대한 자세한 내용은 이 링크를 참조하십시오.

저도 같은 질문을 던졌지만 현재 답변의 문제는 그들이 살해될 과정을 안전하게 확인하지 않는다는 것입니다.그것은 끔찍한 실수로 이어질 수 있습니다 :)...특히 여러 프로세스가 패턴과 일치하는 경우.

면책 사항으로서, 저는 재봉사가 아니며 분명히 개선의 여지가 있습니다.

그래서 저는 작은 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 -9 $(ps aux | grep -e myprocessname | awk '{ print $2 })'

GNOME을 실행하는 경우 윈도우즈에서와 같이 시스템 모니터(시스템 ->관리 ->시스템 모니터)를 사용하여 프로세스를 종료할 수 있습니다.KDE도 비슷한 것을 가지고 있을 것입니다.

기본값kill명령은 명령 이름을 PID 대신 사용할 수 있습니다.(1)을 참조하십시오.종종 발생하는 문제는bash자체 제공kill직업 번호를 받아들이는 것, 예를 들면.kill %1명령 이름이 아닙니다.이것은 기본 명령을 방해합니다.전자 기능이 후자보다 더 유용한 경우, 다음을 사용하지 않도록 설정할 수 있습니다.bash호출 버전

enable -n kill

자세한 내용은kill그리고.enablebash (1)항목.

ps aux | grep processname | cut -d' ' -f7 | xargs kill -9 $

머리글을 파싱하는 어크원라이너ps출력을 사용하면 열 번호(열 이름 제외)에 대해 신경 쓸 필요가 없습니다.지원 정규식.예를 들어, (경로가 없는) 실행 파일 이름에 "firefox" try라는 단어가 포함된 모든 프로세스를 종료하려면

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-on-linux

반응형