'killall'과 'pkill'의 차이점은 무엇입니까?


92

그냥 일반 사용 후 kill <some_pid>몇 년 동안 유닉스 시스템에서, 나는 배운 pkill젊은 리눅스에 정통한에서 동료의 동료 1 .

나는 여러 날 밤낮으로, 느려짐과 경쟁 조건을 통해 Linux-way, pgrep-ing 및 pkill-ing을 곧 받아 들였다 . 이것은 모두 좋고 좋았습니다.

그러나 지금 나는 아무것도 볼 수 없습니다 killall. How-to는 단지 언급하는 것처럼 보이며 killall, 이것이 일종의 병렬 개발인지 또는 killall후계자 pkill인지 또는 다른 것이 있는지 확실하지 않습니다 .

더 타겟팅 된 것으로 보이지만 pkill뭔가 빠진 것 같습니다.

우분투 / 데비안 정통한 2 사람이 언제 또는 왜 killall사용되어야 하는지 , 특히 선호하는 경우 pkill( pkill왜냐하면 더 쉬운 것처럼 보일 때 , 적어도 기본적으로 이름 일치로 더 가파를 수 있기 때문에 ) 사용해야하는 이유를 설명 할 수 있습니까 ?

에 대해 말할 때 killall일부 유닉스 시스템 (Solaris, AIX,?)에서 모든 사용자 프로세스를 종료시키는 명령을 생각하지 않습니다. 다음 은 IBM AIX의 맨 페이지 에서 해당 버전에 대한 설명입니다 .

killall 명령은 killall 프로세스를 생성하는 프로세스를 제외하고 시작한 모든 프로세스를 취소합니다. 이 명령은 제어하는 ​​쉘에서 작성된 모든 프로세스를 취소하는 편리한 방법을 제공합니다. root 사용자가 시작할 때 killall 명령은 시작된 프로세스를 제외한 모든 취소 가능한 프로세스를 취소합니다. 여러 신호가 지정되면 마지막 신호 만 유효합니다.

1 '동료'는 '동료'에서 무료로 업그레이드 할 수 있습니다.
2 원래는 이것이 리눅스 나 데비안 인 줄 알았지 만 일부 소스는 리눅스 killall가 BSD-flavored Unix에서 파생 되었다고 말합니다 .

답변:


68

pkill은 기본 패턴 일치를 수행하는 반면 기본적으로 정확한 프로세스 이름이 필요하기 때문에 사용법에 killall이 있다고 생각합니다. 따라서 killall은 사용자가 맹목적으로 복사하여 붙여 넣기가 더 안전합니다.

Pkill과 killall 모두 고유 한 옵션이 있습니다. Killall에는 프로세스 연령별로 일치하는 플래그가 있으며 pkill에는 지정된 tty에서 프로세스 만 종료하는 플래그가 있습니다. 기타 광고 구역. 둘 다 더 나아진 것은 아니며 다른 특성을 가지고 있습니다.

필자의 매뉴얼 페이지에서 killall은 psmisc 패키지 에서 나온 것으로 여러 프로세스 관리 유틸리티가 있지만 특히 포함하지는 않습니다 ps. ps, top, kill 및 pkill 이 포함 된 procps 패키지 입니다. 내기 procps는 원래 pkill을 가지고 있지 않았으므로 psmisc은 가려움증을 긁어 killall을 생각해 냈습니다.

pkill에 / pgrep을 man 페이지는 당신이 언급대로 그들이 솔라리스 7에 도입 말한다 jgbelacqua는 솔라리스의 killall는하지 유틸리티 가운데서도 따라서 Solaris는 아마에만 procps의 패키지를 가지고 제공했다. 누군가 패턴 일치 프로세스 도구를 원했기 때문에 pkill 및 pgrep입니다. 그것이 procps dev에 의해 개발되었거나 나중에 추가되었는지 여부는 모르겠습니다. 어쨌든, 그것은 그것을 만들어 모든 곳에서 * nixes의 일부가되었습니다.

더 많은 출처 :


1
흠- killall온 (오래된) 솔라리스 시스템이 있었지만 다르게 동작했습니다. 그것은 모든 것을 죽였다.
belacqua

6
@manish-그렇다. SysV 시스템에는 다른 문제가 있었다.
belacqua

1
@djeikyb killall이 더 안전하다는 생각이 들리거나 적어도 그 인기가 많은 부분을 차지할 수 있습니다.
belacqua

5
@Manish : pkill (no kill)에는 pid 번호 나 프로세스 이름이 필요하지 않습니다. 프로세스 이름에서 패턴 일치를 수행합니다.
Javier Rivera

3
killall is safer for users to blindly copy and pastekillall이 실제로 모든 시스템을 종료하는 시스템을 제외하고는 예외입니다. 불행히도 두 개의 서로 다른 유틸리티가 동일한 이름을 갖습니다.
Lie Ryan

7

"killall"에주의하십시오. 어떤 시스템에서는 (나는 어느 것을 잊어 버리는가), killall은 모든 프로세스를 죽 입니다. 인수를 자동으로 무시하고 시스템을 완전히 정지시킵니다.


5
사실이 아닙니다. 인수가없는 killall은 아무 작업도 수행하지 않으며 killall은 인수를 무시하지 않습니다. kill -9 -1시스템을 죽일 killall -9 -1수도 있습니다. 그러나 단지killall [program]
토마스 구

6
원래 질문에서 언급했듯이 SysV 시스템에서 마찬가지입니다.
alanc

3

/ etc / bash_completion을 활성화하면 after killall <part_of_process_name>및 hit 탭-실행중인 프로세스 목록에서 프로세스 이름을 자동 완성합니다.


2
pgrep / pkill에서도 동일한 자동 완성이 수행됩니다. 내가 일반적으로하는 일은 pkill plug<tab>한동안 사용하고 싶지 않지만 여전히 파이어 폭스를 적극적으로 사용하고 싶어한다는 것을 알 때 파이어 폭스 용 플래시 플러그인을 죽이는 것입니다. 이것은 killall과 pgrep / pkill의 차이가 아닌 쉘의 기능입니다.
Arcege

1
차이점은 말하지 않았습니다. PID, 프로세스 이름 등을 검색하지 않는 좋은 기능입니다.
jet

2

두 프로그램 모두에서 옵션을 살펴보면 둘 다 같은 일에 대해 다른 방식으로 수행한다는 것을 알 수 있습니다.

pkill은 프로세스의 다양한 속성 (CMD, PID, PPID, UID ...)에 대해 일치를 수행하고 일치하는 각 프로세스에 지정된 신호를 보냅니다. CMD의 경우 정규식이 사용되며 다른 경우에는 문자열입니다. pkill은 대화식이 아니지만 배치 프로그램에 더 좋습니다.

killall은 전체 명령 문자열이 아닌 프로세스 이름 (comm) 또는 사용자 (user)에 대해 일치를 수행합니다. 인수는 간단한 문자열로 사용되며 전체 'comm'값과 일치해야합니다 (이를 변경하려면 --regexp 옵션도 있음). killall에는 pkill에는없는 --interactive 및 --younger-than 옵션이 있습니다.

SysV 시절의 killall5도 있으며 우분투 패키지 'sysutils'아래에있는 다른 UNIX 변형으로 포팅되었습니다. 이것은 구식 방식과 다르게 작동합니다. 이것은 종종 init 스크립트 내부에서 종료되거나 단일 사용자 모드로 변경되는 데 사용되었습니다.


2
아니, 어느 쪽 pkillkillall,주의를 대화 형으로, 스크립트에 사용되어서는 안된다.
geirha
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.