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


31

Tôi quen thuộc với killlệnh và hầu hết thời gian chúng ta chỉ sử dụng kill -9 để giết một quá trình một cách mạnh mẽ, có nhiều tín hiệu khác có thể được sử dụng kill. Nhưng tôi tự hỏi các trường hợp sử dụng là gì pkillkillall, nếu đã có lệnh kill.

Làm pkillkillallsử dụng killlệnh trong việc thực hiện của họ? Tôi có nghĩa là họ chỉ là bao bọc killhoặc họ có thực hiện riêng của họ?

Tôi cũng muốn biết làm thế nào pgreplệnh lấy id quá trình từ tên tiến trình.

Có phải tất cả các lệnh này sử dụng cùng một cuộc gọi hệ thống cơ bản? Có sự khác biệt nào từ quan điểm hiệu suất, cái nào nhanh hơn không?


2
Hai điều: Tại sao sử dụng kill -9theo mặc định? -15 (vui lòng dừng lại) và -1 (modem đã gác máy, vui lòng SẠCH tự đóng) lịch sự hơn nhiều. Thứ hai. Cẩn thận với việc sử dụng killall trên các hộp không phải linux. Nó có thể cư xử khác đi. (Ví dụ trên solaris, nó sẽ giết tất cả. KHÔNG ĐƯỢC LỌC vào tên quy trình).
Hennes

Câu trả lời:


31

Các killlệnh là một wrapper rất đơn giản để các kill cuộc gọi hệ thống , mà chỉ biết về quá trình ID (PID). pkillkillallcũng là bao bọc chokill gọi hệ thống , (thực ra là thư viện libc gọi trực tiếp cuộc gọi hệ thống), nhưng có thể xác định các PID cho bạn, dựa trên những thứ như, tên quy trình, chủ sở hữu của quy trình, id phiên, v.v.

Làm thế nào pkillkillalllàm việc có thể được nhìn thấy bằng cách sử dụng ltracehoặc stracetrên chúng. Trên Linux, cả hai đều đọc qua /prochệ thống tệp và với mỗi pid (thư mục) được tìm thấy, đi qua đường dẫn theo cách xác định một quy trình bằng tên của nó hoặc các thuộc tính khác. Làm thế nào điều này được thực hiện là nói về mặt kỹ thuật, hạt nhân và hệ thống cụ thể. Nói chung, họ đọc từ /proc/<PID>/statđó chứa tên lệnh là trường thứ 2. Để pkill -fpgrepkiểm tra /cmdlinemục nhập cho mỗi mục nhập của mỗi PID.

pkillpgrepsử dụng readproccuộc gọi hệ thống, trong khi killallkhông. Tôi không thể nói nếu có sự khác biệt về hiệu suất: bạn sẽ phải tự đánh giá điểm đó.


2

kill và killall là những công cụ cung cấp một cách để giết một quá trình. Cái đầu tiên bởi PID của nó, cái thứ hai theo tên của nó. pgrep (danh sách) và pkill (giết theo mặc định) là các công cụ cung cấp cách gửi tin nhắn đến một quy trình bằng tên của nó hoặc các thuộc tính khác, xem: http://linux.die.net/man/1/pkill Để biết thêm thông tin về tín hiệu: http://linux.die.net/man/7/signal


Bạn có nghĩa killalllà được sử dụng để giết một quá trình bằng tên của nó? và nó sử dụng pgrep cho mục đích này? và killallcũng giết chết tất cả các quá trình con ,? tín hiệu nào được killallsử dụng theo mặc định?
Ijaz Ahmad Khan

3
... Trừ khi bạn ở trên Solaris, trong trường hợp đó killallsẽ giết tất cả các quy trình mà bạn có quyền giết, để nếu bạn root, bạn sẽ khởi động lại máy chủ một cách hiệu quả.
Jenny D

1
yep: killall chromiumsẽ giết quá trình crom, pgrep chromiumsẽ cung cấp cho bạn danh sách PID, pkill chromiumsẽ tiêu diệt crom. killall sẽ gửi theo tín hiệu SIGTERM mặc định (dưới dạng pkill)
dervishe
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.