[freebsd] сигнал для процесса

Eugene Grosbein eugen at grosbein.net
Wed Jun 30 22:32:39 EEST 2021


30.06.2021 12:23, Yaroslav Shvets пишет:
> Hello.
> 
> В /usr/local/etc/rc.d есть скрипт, который запускает некий процесс.
> При получении сигнала SIGHUP и скрипт, и процесс отдельно умеют
> этот сигнал обрабатывать.
> Т.е. выполняют отвественную за это логику.
> 
> Если запуск скрипта, а соотвественно и последующий запуск процесса произошел
> во время загрузки системы, то и скрипт, и процесс на SIGHUP не реагируют.
> Т.е. процессы в памяти присутствуют, но на kill -HUP <pid> не реагируют.
> Если скрипт в /usr/local/etc/rc.d запускается из шелла, то и скрипт,
> и процесс вполне реагируют на приходящие сигналы.
> 
> Как мне кажется, дело не в другом окружении.
> Что я упустил?

Когда процесс запускается, он наследует от родителя его окружение.
В это окружение входит также состояние реакции процесса на сигналы,
включая игнорирование/блокировку блокируемых сигналов.

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

Например, такой баг есть в squid, я его им зарепортил в 2016-м с простым исправлением, но без какой-либо реакции вообще.
https://bugs.squid-cache.org/show_bug.cgi?id=4494
https://bugs.squid-cache.org/attachment.cgi?id=3337

В FreeBSD можно посмотреть состояние блокировок сигналов запущенного процесса:

# ps -wo pid,sigmask,sigignore,command -p 53667
  PID BLOCKED  IGNORED COMMAND
53667       0 18788002 /usr/local/sbin/squid -f /usr/local/etc/squid/squid.conf

В данном случае у squid нет заблокированных сигналов и есть игнорируемые.

Предлагаю сравнить в вашем случае это у процессов, запущенных при загрузке или вручную,
будет ли разница?

И если не секрет, что за процесс?



More information about the freebsd mailing list