Giết quá trình willy-nilly không phải là một động thái suôn sẻ: dữ liệu có thể bị mất, các ứng dụng được thiết kế kém có thể tự phá vỡ theo những cách tinh tế không thể sửa được nếu không cài đặt lại .. nhưng nó hoàn toàn phụ thuộc vào việc biết cái gì và cái gì không an toàn trong tình hình đưa ra. và những gì sẽ có nguy cơ. Người dùng nên biết một quy trình là gì, hoặc nên làm gì và các ràng buộc của nó là gì (đĩa IOPS, rss / hoán đổi) và có thể ước tính thời gian của một quá trình chạy dài (giả sử sao chép tệp, mã hóa lại mp3, di chuyển email, sao lưu, [thời gian yêu thích của bạn ở đây].)
Hơn nữa, gửi SIGKILL
đến một pid không đảm bảo sẽ giết nó. Nếu nó bị kẹt trong một tòa nhà cao tầng hoặc đã được khoanh vùng ( Z
trong ps
), nó có thể tiếp tục được khoanh vùng. Đây thường là trường hợp của ^ Z một quá trình chạy dài và quên bg
trước khi thử kill -9
nó. Một đơn giản fg
sẽ kết nối lại stdin / stdout và có thể bỏ chặn quá trình, thường sau đó là quá trình kết thúc. Nếu nó bị kẹt ở nơi khác hoặc trong một số dạng bế tắc hạt nhân khác, chỉ có thể khởi động lại có thể loại bỏ quá trình. (Các quy trình Zombie đã chết sau khi SIGKILL
được xử lý bởi kernel (không có mã vùng người dùng nào nữa sẽ chạy), thường có một lý do kernel (tương tự như bị "chặn" chờ trên một tòa nhà để kết thúc) cho quá trình không kết thúc.)
Ngoài ra, nếu bạn muốn giết một tiến trình và tất cả các con của nó, hãy tập thói quen gọi kill
với PID bị phủ định, không chỉ riêng cho PID . Không có gì đảm bảo SIGHUP
, SIGPIPE
hoặc SIGINT
các tín hiệu khác được dọn sạch sau nó, và có một loạt các quy trình bị từ chối để dọn dẹp (hãy nhớ mongrel?) Thật khó chịu.
Phần thưởng độc ác: kill -9 -1
gây hại nhiều hơn một chút so với kill -9 1
(Đừng làm gốc trừ khi bạn muốn xem điều gì xảy ra trên máy ảo không quan trọng, vứt bỏ)