Поведение программы при получении kill -HUP?

32

Есть ли способ узнать, что будет делать программа, когда она получит сигнал уничтожения HUP?
Не просто запустив команду ofc: D

Например,
killall -HUP pppdбудет перезагружен PPPd
killall -HUP firefoxбудет просто убить Firefox

bbaja42
источник

Ответы:

47

Прочитайте его документацию. Это единственный способ. Как уже писал Кит , первоначальный смысл SIGHUP заключался в том, что пользователь потерял доступ к программе, и поэтому интерактивные программы должны умереть. Демоны - программы, которые не взаимодействуют напрямую с пользователем - не нуждаются в этом поведении и вместо этого часто перезагружают свои файлы конфигурации при получении SIGHUP. Но это всего лишь условности.

Если у вас есть источник, вы можете прочитать это тоже. Или, если у вас есть только двоичный файл, вы можете попытаться разобрать его, найти sigactionвызовы, для которых устанавливается обработчик сигнала SIGHUP, и попытаться выяснить, что делают эти обработчики сигнала. Во-первых, будет проще не отправлять SIGHUP в эту программу.

В любой момент времени данный процесс находится в одном из трех состояний по отношению к конкретному сигналу: игнорирование его, выполнение действия по умолчанию или запуск пользовательского обработчика. Многие юниты позволяют вам видеть маску сигналов процесса ps, например, ps sв Linux. Это может сказать вам, если процесс игнорирует сигнал или мгновенно умрет при SIGHUP, но если процесс установил обработчик, вы не можете сказать, что делает обработчик.

Жиль "ТАК - прекрати быть злым"
источник
1
SIGHUP восходит к временам коммутируемых модемов. Он сигнализировал о зависании модемного соединения. Это все еще относится к потерянным соединениям, но в наши дни это редко зависание, которое вызывает разрыв соединения. P
BillThor
@bill True, но сеанс SSH также будет SIGHUP своего дочернего процесса, если он потеряет соединение с клиентом.
Кит
@Keith: Вот почему я указал, что это относится к разорванным соединениям и редко вызывается зависаниями. На этом этапе было бы непонятно изменить его имя на что-то, связанное с разъединениями, например, SIGDCN.
BillThor
18

Действие по умолчанию - завершить процесс на SIGHUP. Смотрите man 7 signalдля более подробной информации. Но программы могут заманивать это в ловушку и делать все, что они хотят. Поскольку процессы-демоны никогда не должны завершаться, они обычно используют SIGHUP для других целей, например для повторной инициализации (как это делает pppd). Firefox сохраняет действие по умолчанию.

Кит
источник