Sự khác biệt giữa pkill và killall là gì?


49

Tôi biết rằng pkillcó nhiều quy tắc lọc hơn killall. Câu hỏi của tôi là, sự khác biệt giữa:

pkill [signal] name

killall [signal] name

Tôi đã đọc nó killallhiệu quả hơn và tiêu diệt tất cả các quy trình và quy trình con (và đệ quy) phù hợp với namechương trình. pkillkhông làm điều này quá?


Câu trả lời:


46

Các tiện ích pgreppkilltiện ích đã được giới thiệu trong Sun's Solaris 7 và, như g33klord đã lưu ý , chúng lấy một mẫu làm đối số phù hợp với tên của các quy trình đang chạy. Mặc dù pgrepchỉ in một danh sách các quy trình phù hợp, pkillsẽ gửi tín hiệu được chỉ định (hoặc SIGTERMtheo mặc định) cho các quy trình. Các tùy chọn phổ biến và ngữ nghĩa giữa pgreppkillcó ích khi bạn muốn cẩn thận và trước tiên hãy xem lại các quy trình khớp danh sách với pgrep, sau đó tiến hành tiêu diệt chúng pkill. pgreppkillđược cung cấp bởi các procps gói, mà còn cung cấp khác /proctiện ích hệ thống tập tin, chẳng hạn như ps, top, free, uptimesố những người khác.

Các killalllệnh được cung cấp bởi psmisc gói, và khác với pkillở chỗ, theo mặc định, nó phù hợp với tên lập luận chính xác (lên đến 15 ký tự đầu tiên) khi xác định các quá trình tín hiệu sẽ được gửi đến. Các -e, --exacttùy chọn có thể được xác định cũng yêu cầu kết hợp chính xác cho tên dài hơn 15 ký tự. Điều này làm cho killallphần nào an toàn hơn để sử dụng so với pkill. Nếu đối số đã chỉ định chứa /ký tự dấu gạch chéo ( ), đối số được hiểu là tên tệp và các quy trình đang chạy tệp cụ thể đó sẽ được chọn làm người nhận tín hiệu. killallcũng hỗ trợ phù hợp với biểu thức chính quy của tên quá trình, thông qua -r, --regexptùy chọn.

Có những khác biệt khác là tốt. Các killalllệnh ví dụ có các tùy chọn cho các quy trình phù hợp theo độ tuổi ( -o, --older-than-y, --younger-than), trong khi pkillcó thể được nói đến quá trình giết chỉ trên một thiết bị đầu cuối cụ thể (thông qua -ttùy chọn). Rõ ràng sau đó, hai lệnh có hốc cụ thể.

Lưu ý rằng killalllệnh trên hệ thống hậu duệ từ Unix System V (đáng chú ý là Sun's Solaris , AIXHP-UX của IBM ) sẽ giết tất cả các quy trình có thể bị giết bởi một người dùng cụ thể, tắt hệ thống một cách hiệu quả nếu chạy bằng root.

Các tiện ích psmisc của Linux đã được chuyển sang BSD (và trong phần mở rộng Mac OS X ), do đó killallcó các ngữ nghĩa "tiêu diệt theo tên".


Sự khác biệt chính mà tôi gặp phải là dừng các lệnh của một mẫu bởi người dùng là killall -u <username> -r <process>hoặc pkill <process> -U <uid>điều đó giúp killalltôi dễ sử dụng hơn rất nhiều.
jeremysprofile

13

pkilllà thứ đáng để dạy cho các thế hệ tương lai, cả vì các bộ lọc mà bạn đề cập và thực tế là nó được kết hợp với khả năng tái sử dụng cao pgrep. Chúng giết các quy trình theo cùng một cách và không giết chết đệ quy - mặc dù vậy pgrep, bạn có thể chọn theo phiên (per-tty, think setsid) hoặc nhóm quy trình (nghĩ kiểm soát công việc).


8

một điểm khác biệt là killalllấy tên chính xác của quá trình làm đối số trong khi pkillcó thể lấy tên một phần hoặc tên đầy đủ.

Bạn có thể tham khảo câu hỏi này để biết sâu về pkill


1

killall- giết các quá trình theo tên. Sử dụng killalllệnh để gửi tín hiệu đến một hoặc nhiều quy trình phù hợp với tiêu chí lựa chọn, chẳng hạn như tên lệnh, các quy trình thuộc sở hữu của một người dùng cụ thể hoặc tất cả các quy trình trên toàn hệ thống.

pkill- sẽ gửi tín hiệu được chỉ định (theo SIGTERM theo mặc định) cho từng quy trình thay vì liệt kê chúng trên thiết bị xuất chuẩn. pkillcó thể báo hiệu nhiều quá trình như killall, nhưng cũng có thể sử dụng các tiêu chí lựa chọn nâng cao có thể bao gồm mọi kết hợp:

Lệnh UID Parent Terminal

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.