저는 이 명령에 익숙합니다 kill
. 대부분의 경우 kill -9
프로세스를 강제 종료하는 데 이 명령을 사용합니다. 이 명령과 함께 사용할 수 있는 다른 신호도 많이 있습니다 kill
. 하지만 pkill
사용 사례가 무엇인지, 이미 kill 명령이 있는지 알고 싶습니다 .killall
구현 시 이 명령을 실행 pkill
하고 사용하시겠습니까? 내 말은, 그냥 래퍼인가요 , 아니면 자체 구현이 있나요?killall
kill
kill
pgrep
또한 명령이 프로세스 이름에서 프로세스 ID를 가져오는 방법 도 알고 싶습니다 .
이 모든 명령은 동일한 기본 시스템 호출을 사용합니까? 성능 관점에서 어떤 차이가 더 빠릅니까?
답변1
이 kill
명령은 매우 간단한 래퍼입니다.kill
시스템 호출, 프로세스 ID(PID)만 알고 있습니다. pkill
그리고 killall
포장도 하고kill
시스템 호출, (실제로는 시스템 호출의 libc 라이브러리를 직접 호출)이지만 PID는 프로세스 이름, 프로세스 소유자, 세션 ID 및 기타 정보를 기반으로 결정될 수 있습니다.
또는 를 사용하여 방법과 작업을 확인할 수 있습니다 pkill
. Linux에서는 둘 다 파일 시스템을 읽고, 발견된 각 pid(디렉토리)에 대해 이름이나 기타 속성으로 프로세스를 식별하는 방식으로 경로를 탐색합니다. 기술적으로 이것이 수행되는 방법은 커널 및 시스템에 따라 다릅니다. 일반적으로 두 번째 필드에 명령 이름이 포함된 내용을 읽습니다. 각 PID의 proc 항목에 대한 항목을 찾아서 확인하세요.killall
ltrace
strace
/proc
/proc/<PID>/stat
pkill -f
pgrep
/cmdline
pkill
그리고 시스템 호출을 pgrep
사용하십시오 . 그렇지 않으면 그렇지 않습니다. 성능 차이가 있는지는 말할 수 없습니다. 직접 벤치마킹해야 합니다.readproc
killall
답변2
보다 실용적인 답변:
kill
SIGTERM(프로세스 종료) 신호는 기본적으로 SIGTERM인 지정된 프로세스 ID(예: 10341)에 대해 운영 체제로 전송됩니다. 실제로 다른 신호도 지정할 수 있습니다(예: 강제 중단하려면 -9).killall
SIGTERM은 이름과 정확히 일치하는 모든 프로세스에 전송됩니다. 또한 사용자에 의한 하위 집합과 같은 다른 이점도 함께 제공됩니다.pkill
SIGTERM은 주어진 패턴과 일치하는 모든 프로세스에 전송됩니다. 후드 아래에서 pgrep을 사용합니다.
답변3
Kill 및 Killall은 프로세스를 종료하는 방법을 제공하는 도구입니다. 첫 번째는 PID이고 두 번째는 이름입니다. pgrep(목록) 및 pkill(기본 kill)은 이름이나 기타 속성으로 프로세스에 메시지를 보내는 방법을 제공하는 도구입니다. 다음을 참조하세요.http://linux.die.net/man/1/pkill 신호에 대한 추가 정보:http://linux.die.net/man/7/signal