Как узнать, кто посылает сигнал sigterm моему процессу или моей группе процессов? - PullRequest
3 голосов
/ 02 ноября 2010

У нас есть программа-демон-сервер, которая разветвляется на одного ребенка. Когда ребенок выходит, родитель получает сигнал SIGTERM. Итак, мы хотим знать

1) Кто отправил это SIGTERM?

2) Является ли SIGTERM только для родителя или его группы?

3) Как можно создать SIGTERM в этом сценарии?

4) Возможно ли замаскировать этот SIGTERM сигнал? Если да, каков будет побочный эффект этого звонка?

Ответы [ 2 ]

5 голосов
/ 02 ноября 2010

Вам нужен обработчик sig типа SA_SIGINFO.Затем вы получите siginfo_t, который содержит si_pid, который является сигнальным процессом.http://linux.die.net/man/2/sigaction

4 голосов
/ 06 июня 2014

Добавление к ответу @ rib:

Текущие версии strace отображают эту информацию

read(0, 0x7f4ab8353000, 4096)           = ? ERESTARTSYS (To be restarted if SA_RESTART is set)
--- SIGTERM {si_signo=SIGTERM, si_code=SI_USER, si_pid=1, si_uid=0} ---
+++ killed by SIGTERM +++

Я вижу, что мой процесс был убит pid # 1 (init, то есть upstart)

ps У моего CentOS (6.0 и 6.4) его не было, поэтому я собрал его из http://sourceforge.net/projects/strace/,, не уверен, какая версия его добавила

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...