Có sự khác biệt giữa
kill -9 212121
và
kill 212121
Có sự khác biệt giữa
kill -9 212121
và
kill 212121
Câu trả lời:
Trang hướng dẫn sử dụng Ubuntu để kill
giải thích mục đích của việc -9
chuyển đổi (phải thừa nhận theo cách khá khó hiểu):
Name Num Action Description
KILL 9 exit cannot be blocked
Đây là những gì một người đàn ông khác nói.
Lệnh
kill
gửi tín hiệu được chỉ định đến quy trình hoặc nhóm quy trình được chỉ định. Nếu không có tín hiệu được chỉ định,TERM
tín hiệu được gửi. CácTERM
tín hiệu sẽ giết các quy trình mà không bắt tín hiệu này. Đối với các quá trình khác, có thể cần phải sử dụng tín hiệuKILL
(9
), vì tín hiệu này không thể bị bắt.
Do đó, sử dụng công -9
tắc đảm bảo rằng quá trình này bị giết một cách hiệu quả. Mặc dù một quá trình đóng băng hoặc không phản hồi có thể không đáp ứng với TERM
tín hiệu đơn giản , nó sẽ chết khi gửi KILL
tín hiệu.
Lệnh kill sẽ gửi tín hiệu được xác định đến một quá trình với một danh tính nhất định (PID):
kill -<signal> <pid>
Tất nhiên chúng ta chỉ có thể giết các tiến trình chúng ta sở hữu, trong khi root có thể giết tất cả các tiến trình. Xem Wikipedia để có một bản tóm tắt tốt đẹp về các tín hiệu điện toán.
Tín hiệu kill
có thể gửi được liệt kê trong trang . Tín hiệu có thể được thể hiện bằng tên hoặc bằng số. Nếu không có tín hiệu nào được đưa ra tín hiệu mặc định 15 resp. TERM
Được sử dụng.
Do đó, tất cả ba lệnh dưới đây giống hệt nhau:
kill -9 1234
kill -KILL 1234
kill -SIGKILL 1234
Sự khác biệt giữa SIGTERM
và SIGKILL
là cách ứng dụng có thể hoạt động trên tín hiệu:
TERM
: một ứng dụng sẽ có thể chấm dứt, tức là chạy đúng thói quen tắt máy. KILL
: các ứng dụng bị dừng và bị giết ngay lập tức (điều này có thể dẫn đến mất dữ liệu hoặc tăng apport để báo cáo sự cố được cho là trong một số trường hợp).Lưu ý rằng tất cả những điều sau đây là đồng nghĩa:
kill -9 1234
kill -KILL 1234
kill -SIGKILL 1234
Thật đáng để chỉ ra rằng trong thế giới xử lý tín hiệu, SIGKILL là một trong số ít những cái duy nhất được xử lý bởi hệ điều hành chứ không phải chương trình. Khi bạn chạy kill -9
, bạn không yêu cầu ứng dụng tự chấm dứt, thay vào đó bạn đang bảo HĐH ngừng chạy chương trình, bất kể chương trình đang làm gì.
Sau khi SIGKILL được gửi, chương trình sẽ ngay lập tức bị dừng. Nếu bất kỳ cuộc gọi kernel nào đang chạy (ví dụ File IO) thay mặt cho chương trình, các cuộc gọi đó có thể hoặc không thể tiếp tục cho đến khi chúng kết thúc, tùy thuộc vào cuộc gọi, nhưng bản thân chương trình sẽ không chạy nữa. Lưu ý rằng bắt nguồn từ công việc hoặc nhiệm vụ chạy theo một trình gỡ lỗi có thể hành xử khác nhau ở đây.
Tín hiệu khác không thể bị chặn là SIGSTOP có hiệu ứng tương tự, nhưng thay vào đó đóng băng chương trình; bạn có thể gửi SIGCONT sau để tiếp tục. Hành vi này hoàn toàn do HĐH kiểm soát và chương trình không nhận được bất kỳ thông báo trước nào.
Tất cả các tín hiệu khác được gửi đến chương trình; nó có thể xử lý chúng tuy nhiên nó chọn hoặc nếu nó bỏ qua tín hiệu thì một hành vi mặc định được tuân theo.
Dưới đây là một vài tín hiệu hữu ích mà bạn có thể thấy mình đang gửi đến một quy trình:
kill
và killall
. cat /etc/passwd | head -n1
sẽ gửi SIGPIPE đến cat
quy trình sau khi dòng đầu tiên được in, gây ra cat
chấm dứt trước khi hoàn thành toàn bộ tệp.Mặc dù tất cả các tín hiệu này xảy ra "một cách tự nhiên" trong cài đặt riêng của chúng, bạn có thể sử dụng tín hiệu để giả mạo một điều kiện để đạt được kết quả mong muốn.
Ví dụ: nếu bạn muốn chấm dứt phiên SSH của ai đó, bạn có thể chỉ cần giết quá trình, nhưng bằng cách đó, bạn sẽ ngăn không cho cập nhật tệp LỊCH SỬ, điều này có thể quan trọng vì lý do bảo mật. Nhưng thay vào đó, nếu bạn gửi nó SIGHUP , thì quá trình sẽ cho rằng kết nối đã chết và sẽ thực hiện việc dọn dẹp tiêu chuẩn.
SIGQUIT
, trong đó hành động mặc định là kết xuất lõi và chấm dứt. Điều này có thể được sử dụng nếu một chương trình đang làm gì đó rất sai, bạn cần dừng nó ngay lập tức và muốn có thể gỡ lỗi nó sau.
kill -9 Ý nghĩa: Quá trình sẽ bị giết bởi kernel; tín hiệu này không thể bỏ qua. 9 có nghĩa là tín hiệu KILL không thể bắt hoặc không thể bắt được
Sử dụng: SIGKILL singal
Kill Nghĩa: Lệnh kill không có tín hiệu nào vượt qua tín hiệu 15, kết thúc quá trình theo cách thông thường.
Sử dụng: Tín hiệu SIGTERM , có thể được xử lý bởi các lập trình viên
kill -9