Я занимаюсь разработкой приложения и хочу, чтобы оно выводило статистику времени выполнения на консоль по требованию. kill
и сигналы сразу же пришли мне в голову.
Чтение сигналов Unix в Wiki, SIGINFO
похоже, путь, потому что:
- Он предназначен для этих целей
- Не завершает процесс, если обработчик сигнала не реализован (в отличие от
SIGUSRx
- см. Здесь )
Однако, проверяя вывод kill -l
, кажется, мой сервер не реализовал этот сигнал.
Мои вопросы:
- Почему
SIGINFO
отсутствует в моей системе? Это отсутствует во всех системах GNU Linux? - Есть ли простой (т.е. без перекомпиляции ядра / glibc) способ включить этот сигнал? Если нет, какой будет трудный путь?
- Какой альтернативный сигнал я мог бы использовать для своих целей, который не вызвал бы побочных эффектов, если бы не обрабатывался целевым процессом? (Я уже предполагаю, что нет, так как не смог найти какой-либо другой подходящий сигнал в руководстве 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?
^T
в выводеstty -a
?dd
с этим на моем Mac.^T
во времяdd
выполнения ничего не делает на машине Linux - я обновлю вопрос соответственно.Ответы:
Был разговор (еще в дни Linux 1.x-1.x) о добавлении этого (потому что это было полезно в системах BSD), но, если я правильно помню, были причины, по которым было труднее сделать правильное в Linux, чем в BSD в то время. ,
Обратите внимание, что то, о чем вы спрашиваете, является лишь небольшой частью функции (а именно, вы говорите о
stty info
записи для control-T, заставляющей ядро доставлятьSIGINFO
в группуtty
процессов) - эта часть «проста» - но ядро сообщает информацию о состоянии процесса, когда оно не обрабатывает сигнал (потому что в то время очень немногие вещи поддерживали это, функция была в основном о том, «этот процесс вращается или завис» и «что это за процесс»). это в любом случае ") сложнее - даже в ISTR возникают проблемы с безопасностью / доверием при точном отображении этой информации и о том, должна ли она быть связана с путем Secure Attention Key. Тем не менее, может быть какое-то значение в «легкой» версии, которая только посылает сигнал ...(Из личной памяти; быстрый веб-поиск не дает ничего очевидного, но я думаю, что нужно поискать действительно старые архивы, чтобы найти обсуждение).
источник
По вашему вопросу 1):
Из
man 7 signal
системы Arch Linux:По этому определению,
SIGINFO
доступно только на альфа или sparc архитектурах.источник