2014-04-02 17 views
5

Trong kịch bản bash tôi xử lý tín hiệu khác nhau như sau:Tại sao tôi không nhận được tín hiệu SIGKILL trên lệnh kill -9 trong bash?

#!/bin/bash 

sighdl() 
{ 
    echo "signal caught" 
    #do something 
    exit 0 
} 

trap sighdl SIGKILL SIGINT SIGTERM 

Trên đang xử lý tín hiệu đúng cho hoạt động sau đây:

  1. Ctrl + C
  2. kill pid
  3. pkill scriptname

Đối với kill -9 pid nó không gọi sighdl. Theo sự hiểu biết của tôi (nếu tôi không sai) kill -9 gửi tín hiệu SIGKILL.

Bất kỳ ý tưởng nào?

+1

Từ người đàn ông '-9 KILL (không bắt được, không đánh lừa được)' điều này có nghĩa là nó sẽ không gọi là 'sighdl'? –

+0

Sig giết không thể bị bắt ... Có hai tín hiệu không thể bị bắt SIGKILL và SIGSTOP –

+0

@ Q_SaD..Bất cứ cách nào để thông báo cho tập lệnh của tôi trên lệnh 'kill -9'? –

Trả lời

8

Bạn không thể làm điều đó. Có 9 là SIGKILL và hệ thống Unix theo thiết kế không cho phép bất kỳ tập lệnh/chương trình nào để bẫy SIGKILL vì lý do bảo mật. Nếu không, bất kỳ tập lệnh nào cũng có thể bẫy & bỏ qua SIGKILL, điều này sẽ không thể chấm dứt tập lệnh đó bằng OS.

+0

ok..can i đính kèm tín hiệu do người dùng xác định với 'kill -9'? Bởi vì tôi cần phải thông báo cho kịch bản khi người dùng giết quá trình script bằng bất kỳ cách nào. –

+0

Bạn không thể thông báo khi người dùng gửi 'kill -9'. Bất kỳ tín hiệu nào khác bạn có thể nắm bắt và xử lý. – anubhava

+3

@Jayesh Đơn giản chỉ cần đặt, đó là lỗi * của người dùng *, không phải của tập lệnh, nếu tập lệnh không thể tự dọn dẹp sau khi chính nó đúng sau khi người dùng gửi 'SIGKILL'. Hãy suy nghĩ về nó theo cách này: hệ điều hành không thể tắt máy đúng cách nếu bạn đã rút phích cắm máy tính (hoặc kéo pin), và 'SIGKILL' là phần mềm tương đương với việc kéo phích cắm vào một quá trình. – chepner

Các vấn đề liên quan