Kill, pkill 및 Killall의 차이점은 무엇입니까?

Kill, pkill 및 Killall의 차이점은 무엇입니까?

저는 이 명령에 익숙합니다 kill. 대부분의 경우 kill -9프로세스를 강제 종료하는 데 이 명령을 사용합니다. 이 명령과 함께 사용할 수 있는 다른 신호도 많이 있습니다 kill. 하지만 pkill사용 사례가 무엇인지, 이미 kill 명령이 있는지 알고 싶습니다 .killall

구현 시 이 명령을 실행 pkill하고 사용하시겠습니까? 내 말은, 그냥 래퍼인가요 , 아니면 자체 구현이 있나요?killallkillkill

pgrep또한 명령이 프로세스 이름에서 프로세스 ID를 가져오는 방법 도 알고 싶습니다 .

이 모든 명령은 동일한 기본 시스템 호출을 사용합니까? 성능 관점에서 어떤 차이가 더 빠릅니까?

답변1

kill명령은 매우 간단한 래퍼입니다.kill 시스템 호출, 프로세스 ID(PID)만 알고 있습니다. pkill그리고 killall포장도 하고kill 시스템 호출, (실제로는 시스템 호출의 libc 라이브러리를 직접 호출)이지만 PID는 프로세스 이름, 프로세스 소유자, 세션 ID 및 기타 정보를 기반으로 결정될 수 있습니다.

또는 를 사용하여 방법과 작업을 확인할 수 있습니다 pkill. Linux에서는 둘 다 파일 시스템을 읽고, 발견된 각 pid(디렉토리)에 대해 이름이나 기타 속성으로 프로세스를 식별하는 방식으로 경로를 탐색합니다. 기술적으로 이것이 수행되는 방법은 커널 및 시스템에 따라 다릅니다. 일반적으로 두 번째 필드에 명령 이름이 포함된 내용을 읽습니다. 각 PID의 proc 항목에 대한 항목을 찾아서 확인하세요.killallltracestrace/proc/proc/<PID>/statpkill -fpgrep/cmdline

pkill그리고 시스템 호출을 pgrep사용하십시오 . 그렇지 않으면 그렇지 않습니다. 성능 차이가 있는지는 말할 수 없습니다. 직접 벤치마킹해야 합니다.readprockillall

답변2

보다 실용적인 답변:

  • killSIGTERM(프로세스 종료) 신호는 기본적으로 SIGTERM인 지정된 프로세스 ID(예: 10341)에 대해 운영 체제로 전송됩니다. 실제로 다른 신호도 지정할 수 있습니다(예: 강제 중단하려면 -9).

  • killallSIGTERM은 이름과 정확히 일치하는 모든 프로세스에 전송됩니다. 또한 사용자에 의한 하위 집합과 같은 다른 이점도 함께 제공됩니다.

  • pkillSIGTERM은 주어진 패턴과 일치하는 모든 프로세스에 전송됩니다. 후드 아래에서 pgrep을 사용합니다.

답변3

Kill 및 Killall은 프로세스를 종료하는 방법을 제공하는 도구입니다. 첫 번째는 PID이고 두 번째는 이름입니다. pgrep(목록) 및 pkill(기본 kill)은 이름이나 기타 속성으로 프로세스에 메시지를 보내는 방법을 제공하는 도구입니다. 다음을 참조하세요.http://linux.die.net/man/1/pkill 신호에 대한 추가 정보:http://linux.die.net/man/7/signal

관련 정보