SIGINFO в GNU Linux (Arch Linux) отсутствует

12

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

Чтение сигналов Unix в Wiki, 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).
Анхель

Ответы:

4

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

Обратите внимание, что то, о чем вы спрашиваете, является лишь небольшой частью функции (а именно, вы говорите о stty infoзаписи для control-T, заставляющей ядро ​​доставлять SIGINFOв группу ttyпроцессов) - эта часть «проста» - но ядро ​​сообщает информацию о состоянии процесса, когда оно не обрабатывает сигнал (потому что в то время очень немногие вещи поддерживали это, функция была в основном о том, «этот процесс вращается или завис» и «что это за процесс»). это в любом случае ") сложнее - даже в ISTR возникают проблемы с безопасностью / доверием при точном отображении этой информации и о том, должна ли она быть связана с путем Secure Attention Key. Тем не менее, может быть какое-то значение в «легкой» версии, которая только посылает сигнал ...

(Из личной памяти; быстрый веб-поиск не дает ничего очевидного, но я думаю, что нужно поискать действительно старые архивы, чтобы найти обсуждение).

Eichin
источник
1

По вашему вопросу 1):

Из man 7 signalсистемы Arch Linux:

SIGINFO 29, -, - синоним SIGPWR

...

(Сигнал 29 это SIGINFO / SIGPWR на альфе, но SIGLOST на спарке.)

...

SIGPWR (который не указан в POSIX.1-2001) обычно игнорируется по умолчанию в тех других системах UNIX, где он появляется.

По этому определению, SIGINFOдоступно только на альфа или sparc архитектурах.

Guido
источник