SIGINFO в GNU Linux (Arch Linux) відсутній


12

Я розробляю програму, і мені хотілося б, щоб вона надрукувала статистику виконання на консоль на вимогу. killі сигнали мені відразу прийшли в голову.

Читання сигналів Unix у Вікі, SIGINFOздається, такий шлях:

  • Він призначений для цих цілей
  • Не припиняє процес, якщо обробник сигналу не реалізований (всупереч SIGUSRx- див. Тут )

Однак, перевіряючи вихідний сигнал kill -l, схоже, мій сервер не реалізує цей сигнал.

Мої запитання:

  1. Чому його SIGINFOнемає в моїй системі? Він відсутній у всіх системах GNU Linux?
  2. Чи є простий (тобто не перекомпіляція ядра / glibc) способу включення цього сигналу? Якщо ні, який би був важкий шлях?
  3. Який альтернативний сигнал я міг би використовувати для своїх цілей, який не викликав би побічних ефектів, якщо не керувати цільовим процесом? (Я вже припускаю, що жоден, оскільки я не зміг знайти жодного іншого відповідного сигналу в посібнику glibc )

Linux metainfo:

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

Оновлення: Я все ще шукаю додаткову інформацію щодо того, чому цей сигнал умовно виключається з інших систем, ніж BSD (див. Коментарі нижче). Сигнал здається досить корисним для багатьох цілей, тому мені важко повірити, що це лише питання примхи - тож який справжній шоустоппер для цього сигналу доступний у Linux?


2
Чи ^Tвідображається у висновку stty -a?
Марк Плотнік

Ага, це не так - я, мабуть, помилився з описаною поведінкою ddз моїм Mac. ^Tпід час ddвиконання нічого не працює на машині Linux - я відповідно оновлю питання.
Роберт Россманн

Так, Ctrl-T і SIGINFO - це функції BSD (і MacOSX).
Марк Плотнік

Але сигнал визначений у Бібліотеці GNU C, яку використовують системи Linux ... Це тоді відключено спеціально?
Роберт Россманн

1
@RobertRossmann, сигнали доставляються ядром. Питання в тому, чому ядро ​​Linux не реалізує це (мабуть, вони скопіювали сигнали SysV).
Ángel

Відповіді:


4

Була розмова (ще в linux 0.x-1.x днів) про додавання цього (тому що це було корисно в системах BSD), але якщо я пригадую правильно, то причини було важче зробити в Linux, ніж BSD в той час .

Зверніть увагу, що ви питаєте про те , лише невелика частина функції (а саме, ви говорите про stty infoзаписи для управління-T , викликаючи ядро , щоб доставити SIGINFOдо ttyгрупи процесів «s) - ця частина" легко "- але маючи інформацію про звіт ядра про стан процесу, коли він не обробляє сигнал (оскільки в той час дуже мало речей мали підтримку для цього, функція в основному полягала в тому, "це процес крутиться чи висів" і "що це за процес все одно ") важче - ISTR навіть виникає проблеми безпеки / довіри щодо точного відображення цієї інформації та чи має вона бути пов’язана із контуром безпечного ключа. Однак, у "легкій" версії, яка лише посилає сигнал, може бути якесь значення ...

(З особистої пам’яті; швидкий пошук в Інтернеті не виявляє нічого очевидного, але я думаю, що для пошуку дискусії доведеться зануритися у справді старі архіви.)


1

Щодо вашого питання 1):

З man 7 signalсистеми Arch Linux:

SIGINFO 29, -, - Синонім SIGPWR

(Сигнал 29 - SIGINFO / SIGPWR на альфа, але SIGLOST на sparc.)

SIGPWR (який не вказаний у POSIX.1-2001), як правило, ігнорується в інших системах UNIX, де він з'являється.

За цим визначенням SIGINFOвін доступний лише в альфа-архітектурі або sparc-архітектурі.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.