2013-06-21 42 views
6

Sự khác nhau giữa tín hiệu SIGINT và tín hiệu SIGTERM là gì? Tôi biết rằng SIGINT tương đương với cách nhấn Ctrl + C trên bàn phím, nhưng SIGTERM là gì? Nếu tôi muốn dừng một số quy trình nền một cách duyên dáng, tôi nên sử dụng quy trình nào trong số này?kill -INT vs kill -TERM

Trả lời

10

Sự khác biệt duy nhất trong phản hồi là tùy thuộc vào nhà phát triển. Nếu nhà phát triển muốn ứng dụng phản hồi lại SIGTERM khác với SIGINT thì các trình xử lý khác nhau sẽ được đăng ký. Nếu bạn muốn dừng quá trình nền một cách duyên dáng, bạn thường sẽ gửi SIGTERM. Nếu bạn đang phát triển một ứng dụng, bạn nên trả lời SIGTERM bằng cách thoát ra một cách duyên dáng. SIGINT thường được xử lý theo cùng một cách, nhưng không phải lúc nào cũng vậy. Ví dụ: thường thuận tiện khi trả lời SIGINT bằng cách báo cáo trạng thái hoặc tính toán từng phần. Điều này giúp người dùng dễ dàng chạy ứng dụng trên thiết bị đầu cuối để nhận kết quả một phần, nhưng hơi khó khăn hơn khi chấm dứt chương trình vì nó thường yêu cầu người dùng mở một trình bao khác và gửi SIGTERM qua kill. Nói cách khác, nó phụ thuộc vào ứng dụng nhưng quy ước là phản hồi SIGTERM bằng cách tắt một cách duyên dáng, hành động mặc định cho cả hai tín hiệu là chấm dứt và hầu hết các ứng dụng phản hồi SIGINT bằng cách dừng một cách duyên dáng.

6

Nếu tôi muốn dừng quá trình nền một cách duyên dáng, tôi nên sử dụng quy trình nào trong số này?

Các unix danh sách các tín hiệu hẹn hò trở lại thời gian khi máy tính có thiết bị đầu cuối nối tiếp và modem, đó là nơi mà các khái niệm về một kiểm soát thiết bị đầu cuối bắt nguồn. Khi một modem giảm sóng mang, đường dây là treo lên.

SIGHUP (1) do đó sẽ biểu thị mất kết nối, buộc chương trình phải thoát hoặc khởi động lại. Đối với daemon như syslogdsshd, xử lý không có kết nối đầu cuối được cho là tiếp tục chạy, SIGHUP thường là tín hiệu được sử dụng để khởi động lại hoặc đặt lại.

SIGINT (2) và SIGQUIT (3) theo nghĩa đen là "gián đoạn" hoặc "thoát", "từ bàn phím", cho phép người dùng kiểm soát ngay lập tức nếu một chương trình sẽ có kết nối. Với thiết bị đầu cuối dựa trên ký tự vật lý, đây là cách duy nhất để dừng chương trình !

SIGTERM (15) không liên quan đến bất kỳ xử lý thiết bị đầu cuối nào và chỉ có thể được gửi từ một quy trình khác. Đây sẽ là tín hiệu thông thường để gửi đến một quá trình nền.

0

SIGINT là tín hiệu ngắt chương trình, sẽ được gửi khi người dùng nhấn Ctrl + C. SIGTERM là một tín hiệu chấm dứt, điều này sẽ được gửi đến một quá trình để yêu cầu chấm dứt quá trình, nhưng nó có thể bị bắt hoặc bỏ qua bởi quy trình cụ thể đó.

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