Ответ 1
Из GNU docs об обработке сигналов:
Сигналы SIGUSR1 и SIGUSR2 зарезервированы для использования любым способом. Они полезны для простой межпроцессной коммуникации, если вы пишете обработчик сигналов для них в программе, которая получает сигнал. Ниже приведен пример использования SIGUSR1 и SIGUSR2 в разделе "Сигнализация другого процесса". Действие по умолчанию - это завершение процесса.
Действие по умолчанию для SIGINFO - ничего не делать, поэтому оно может быть более подходящим:
SIGINFO: запрос информации. В 4.4 BSD и системе GNU этот сигнал отправляется всем процессам в группе процесса переднего плана управляющего терминала, когда пользователь вводит символ STATUS в каноническом режиме; см. раздел Символы, вызывающие сигналы. Если процесс является лидером группы процессов, действие по умолчанию заключается в том, чтобы печатать некоторую информацию о состоянии системы и о том, что делает этот процесс. В противном случае по умолчанию ничего не делать.
SIGHUP испускается, когда управляющий терминал закрыт, но поскольку большинство демонов не подключены к терминалу, это не редкость использовать это как "перезагрузка":
Программы Daemon иногда используют SIGHUP в качестве сигнала для перезагрузки, наиболее распространенной причиной этого является перепросмотр измененного файла конфигурации.
Кстати, ваш сторожевой таймер время от времени может читать конфигурационный файл, чтобы узнать, должен ли он возобновить процесс.
Мой личный фаворит для сторожевого пса supervisor.
$ supervisorctl start someapp
someapp: started
$ supervisorctl status someapp
someapp RUNNING pid 16583, uptime 19:16:26
$ supervisorctl stop someapp
someapp: stopped
Посмотрите, возвращает ли kill -l
список сигналов на вашей платформе и попробуйте некоторые из них, но SIGUSR1 кажется плохим выбором.
$ kill -l
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR
31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3
38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7
58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
63) SIGRTMAX-1 64) SIGRTMAX
[ОБНОВЛЕНИЕ]
Комментарии Carpetsmoker о различиях в поведении Linux и BSD:
SIGINFO, похоже, работает по-разному в GNU libc и BSD; на BSD, он работает так, как вы описываете, но в Linux он либо не существует, либо такой же, как SIGPWR... Руководство GNU libc кажется неправильным в этом отношении (ваш вывод kill -l также не отображает SIGINFO)... Я не знаю, почему GNU не поддерживает его, потому что я считаю его очень полезным... - Carpetsmoker