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 нет заблокированных сигналов и есть игнорируемые. Предлагаю сравнить в вашем случае это у процессов, запущенных при загрузке или вручную, будет ли разница? И если не секрет, что за процесс? _______________________________________________ freebsd mailing list freebsd@uafug.org.ua http://mailman.uafug.org.ua/mailman/listinfo/freebsd