프로세스 ID를 찾아 종료합니다.

프로세스 ID를 찾아 종료합니다.

백그라운드 프로세스를 종료해야 할 때마다 이렇게 합니다.ps -e | grep <process_name>

이와 같은 내용을 인쇄한 다음 1766 ? 00:00:13 conky이와 같은 프로세스 ID를 사용합니다.killkill 1766

이것을 단순화할 수 있는 방법이 있나요? 더 빠르게 만드시겠어요? 타이핑이 적나요?

답변1

(TL,DR pgrep:, pkill)

많은 UNIX 변형이 다음과 함께 제공됩니다.pgrep그리고 그 동료들 pkill:솔라리스,리눅스(의 일부표준 프로세스 유틸리티, 임베디드 Linux 시스템에는 없을 수도 있음),FreeBSD,오픈BSD,네트워크BSD, … 하지만OS X의 MacPorts에서만 사용 가능,AIX 아님, 그리고최근 HP-UX에서만. 이 pgrep유틸리티는 이름, 사용자 및 기타 기준과 일치하는 프로세스의 프로세스 ID를 표시합니다. 인수는 pgrep프로세스 실행 파일 이름의 일부와 일치해야 하는 정규식으로 해석됩니다(변경 옵션을 전달하지 않는 한). pkill대신 호출하면 pgrep유틸리티는 프로세스 ID를 표시하는 대신 신호를 보냅니다.

또 다른 유사한 유틸리티는피도프. 존재하다리눅스, 이는 다음으로 구성됩니다.시스템 초기화또는바쁜 상자(따라서 이 기능이 없는 임베디드 Linux 시스템에서는 종종 이를 찾을 수 있습니다 pgrep.) 다른 UNIX 변형에도 포트가 있습니다. 이 pidof유틸리티에는 옵션이 적고 대부분 전체 실행 파일 이름과 일치합니다. 동반 유틸리티는 killall일치하는 프로그램에 신호를 보냅니다.

¹Solaris 및 다른 UNIX 변형에서는 다른 의미를 갖습니다. Solaris에서는 루트로 입력하지 마십시오 . killallkillall

답변2

  • killall ProcessName(이 명령의 한 가지 단점은 프로그램의 프로세스 이름을 항상 알 수 없다는 것입니다.)
  • pidof ProccessName그리고kill the result form pidof
  • ps xu | grep <process name> | grep -v grep | awk '{ print $2 }' | xargs kill -9이 줄을 시도해보고 bash 기록에서 재사용하거나 별칭을 만드는 것이 더 좋습니다.

답변3

Hanan이 몇 가지 좋은 제안을 했지만 나는 pgrep/ 를 추가하겠습니다 pkill. 이를 통해 어떤 프로세스를 찾을 것인지 더 잘 제어할 수 있으며, 종료해야 할 정확한 프로세스를 모르는 경우 정규식을 사용할 수 있습니다.

PS Hanan은 백틱을 사용하여 직접 입력 pidof할 수 있습니다 .kill

kill `pidof processname`

답변4

이건 어때 -

ps -e | awk '$4~/<process name>/{print $1}' | xargs kill

예:

[jaypal:~/Temp] sleep 100&
[1] 74863
[jaypal:~/Temp] ps -e | awk '$4~/sleep/{print $1}' | xargs kill
[1]+  Terminated: 15          sleep 100

고쳐 쓰다:

죄송합니다. 이것은 분명히 입력을 줄여야 한다는 요구 사항을 충족하지 않으므로 시작 스크립트 에 function를 추가하는 것이 좋은 접근 방식입니다. 기능은 다음과 같습니다 -.bashrc.profile

killp() {
awk -v pname="$1" '($4==pname){print $1}' <(ps -e) | xargs kill
}

추가한 후에는 프로세스 이름만 전달하면 됩니다.

[jaypal:~] sleep 100&
[1] 77212
[jaypal:~] killp sleep
[1]+  Terminated: 15          sleep 100

관련 정보