SIGINFO trên GNU Linux (Arch Linux) bị thiếu


12

Tôi đang phát triển một ứng dụng và tôi muốn nó in một số thống kê thời gian chạy lên bàn điều khiển theo yêu cầu. killvà tín hiệu đến với tâm trí tôi ngay lập tức.

Đọc qua các tín hiệu Unix trên Wiki, SIGINFOcó vẻ như là cách để đi bởi vì:

  • Nó được dành cho các mục đích này
  • Không chấm dứt quá trình nếu trình xử lý tín hiệu không được thực hiện (trái với SIGUSRx- xem tại đây )

Tuy nhiên, bằng cách kiểm tra đầu ra của kill -l, có vẻ như máy chủ của tôi không thực hiện tín hiệu này.

Câu hỏi của tôi là:

  1. Tại sao SIGINFOthiếu trên hệ thống của tôi? Có phải nó vắng mặt trên tất cả các hệ thống GNU Linux?
  2. Có cách nào dễ dàng (nghĩa là không biên dịch lại kernel / glibc) để bật tín hiệu này không? Nếu không, điều gì sẽ là khó khăn?
  3. Tôi có thể sử dụng tín hiệu thay thế nào cho mục đích của mình mà không gây ra bất kỳ tác dụng phụ nào nếu không được xử lý bởi quy trình mục tiêu? (Tôi đã giả sử không có vì tôi không thể tìm thấy bất kỳ tín hiệu phù hợp nào khác trong hướng dẫn sử dụng của glibc )

Thông tin chi tiết về Linux:

Linux whatever 3.18.2-2-ARCH #1 SMP PREEMPT Fri Jan 9 07:37:51 CET 2015 x86_64 GNU/Linux

Cập nhật: Tôi vẫn đang tìm kiếm thêm thông tin về lý do tại sao tín hiệu này bị loại trừ một cách có điều kiện khỏi các hệ thống khác ngoài BSD (xem bình luận bên dưới). Tín hiệu này có vẻ khá hữu ích cho nhiều mục đích, vì vậy thật khó để tôi tin rằng đó chỉ là vấn đề bất chợt - vậy showstopper thực sự cho tín hiệu này có sẵn trên Linux là gì?


2
^Txuất hiện trong đầu ra của stty -a?
Đánh dấu Plotnick

À, không phải - tôi đã nhầm lẫn hành vi được mô tả ddvới điều đó trên máy Mac của tôi. ^Ttrong quá trình ddthực thi không có gì trên máy Linux - tôi sẽ cập nhật câu hỏi tương ứng.
Robert Rossmann

Vâng, Ctrl-T và SIGINFO là các tính năng BSD (và MacOSX).
Đánh dấu Plotnick

Nhưng tín hiệu được xác định trong Thư viện GNU C mà các hệ thống Linux sử dụng ... Sau đó, nó có bị vô hiệu hóa không?
Robert Rossmann

1
@RobertRossmann, các tín hiệu được phân phối bởi kernel. Câu hỏi đặt ra là tại sao nhân Linux không thực hiện nó (vì có thể họ đã sao chép tín hiệu SysV).
Ángel

Câu trả lời:


4

Đã có cuộc nói chuyện (trở lại trong linux 0.x-1.x ngày) khi thêm phần này (vì nó hữu ích trên các hệ thống BSD) nhưng nếu tôi nhớ lại chính xác thì có nhiều lý do khó thực hiện ngay trên Linux so với BSD vào thời điểm đó .

Lưu ý rằng những gì bạn đang hỏi chỉ là một phần nhỏ của tính năng (cụ thể là bạn đang nói về một stty infomục nhập cho control-T khiến kernel gửi SIGINFOđến ttynhóm quy trình của nó) - phần đó rất "dễ dàng" - nhưng có thông tin báo cáo kernel về trạng thái quá trình khi nó không xử lý tín hiệu (vì tại thời điểm đó có rất ít thứ hỗ trợ cho điều đó, tính năng chủ yếu là về "quá trình này quay hay treo" và "quá trình này là gì dù sao đi nữa ") khó hơn - ISTR thậm chí còn có vấn đề về bảo mật / tin cậy về việc hiển thị thông tin đó một cách chính xác và liệu nó có được liên kết với đường dẫn Khóa chú ý an toàn hay không. Điều đó nói rằng, có thể có một số giá trị trong phiên bản "dễ dàng" chỉ gửi tín hiệu ...

(Từ bộ nhớ cá nhân; tìm kiếm trên web nhanh không cho thấy bất cứ điều gì rõ ràng nhưng tôi nghĩ người ta sẽ phải đào sâu vào kho lưu trữ thực sự cũ để tìm cuộc thảo luận.)


1

Về câu hỏi của bạn 1):

Từ man 7 signaltrên hệ thống Arch Linux:

SIGINFO 29, -, - Một từ đồng nghĩa với SIGPWR

Giáo dục

(Tín hiệu 29 là SIGINFO / SIGPWR trên bản alpha nhưng SIGLOST trên sparc.)

Giáo dục

SIGPWR (không được chỉ định trong POSIX.1-2001) thường bị bỏ qua theo mặc định trên các hệ thống UNIX khác nơi nó xuất hiện.

Theo định nghĩa này, SIGINFOchỉ có sẵn trên kiến ​​trúc alpha hoặc sparc.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.