2010-10-11 14 views
16

Tôi có yêu cầu ghi vào tệp nhật ký khi nhận bất kỳ lệnh chấm dứt nào như SIGTERM AND SIGKILL.Bộ xử lý tín hiệu SIGKILL

Tôi có thể đăng ký SIGTERM nhưng cách xử lý tín hiệu SIGKILL?

+0

đề xuất đọc: [Cố gắng xử lý SIGKILL] (http://stackoverflow.com/questions/3689403/how-do-i-send- a-signal-to-perl-on-windows) –

+1

có thể trùng lặp của [Làm thế nào để xử lý một cách duyên dáng tín hiệu SIGKILL] (http://stackoverflow.com/questions/2541597/how-to-gracefully-handle-the-sigkill- signal-in-java) –

+0

@Ben Voigt: Tôi do dự để đánh dấu điều này là một bản sao của "Cách xử lý một cách duyên dáng tín hiệu SIGKILL" vì câu hỏi đó chứa thông tin sai lệch cho thấy Control-C gửi tín hiệu KILL khi thực tế nó gửi tín hiệu INTR. – Omnifarious

Trả lời

21

Bạn không thể, ít nhất là không cho quá trình bị giết.

Điều bạn có thể làm là sắp xếp quy trình cha mẹ để theo dõi quá trình của trẻ em và hành động tương ứng. Bất kỳ hệ thống giám sát quy trình hợp lý nào, chẳng hạn như daemontools, có một cơ sở như vậy được xây dựng.

+0

Sử dụng quy trình gốc rất dễ dàng, nhưng không bắt buộc. Bất kỳ quá trình nào giữ đầu kia của đường ống hoặc nămo sẽ được thông báo khi đồng đẳng của nó bị giết. –

+0

@Ben: Đường ống có thể bị đóng qua một số phương tiện khác so với cái chết của quá trình, và do đó không hoàn toàn đáng tin cậy. Nhưng nếu bạn không kiểm soát quá trình cha mẹ, đó có thể là lựa chọn duy nhất bạn có. (daemontools có một chương trình 'fghack' hoạt động trên tiền đề đó.) –