Вопрос по linux – Как сигнализировать о приложении, не убивая его в Linux?

30

У меня есть сторожевое приложение. Он наблюдает за моим основным приложением, которое может по тем или иным причинам зависать (я знаю, что это плохо, но это не главное).

Я запрограммировал этот сторожевой таймер на прием сигналов SIGUSR1, чтобы прекратить мониторинг присутствия моего приложения. Я сигнализирую это

kill -SIGUSR1 `pidof myapp`

Это работает очень хорошо. Моя проблема возникает, когда я пытаюсь сигнализировать старую версию сторожевого таймера, в которой эта функция не встроена. В этом случае сигнал kill убивает сторожевой таймер (завершает процесс), что приводит к дальнейшим осложнениям (перезагрузка устройства). ,

Есть ли способ сигнализировать мой сторожевой таймер с помощью SIGUSR1, чтобы он не завершался, если этот конкретный сигнал не обрабатывается?

Error: User Rate Limit Exceeded jww

Ваш Ответ

2   ответа
30

Error: User Rate Limit ExceededError: User Rate Limit ExceededError: User Rate Limit Exceeded

The SIGUSR1 and SIGUSR2 signals are set aside for you to use any way you want. They're useful for simple interprocess communication, if you write a signal handler for them in the program that receives the signal. There is an example showing the use of SIGUSR1 and SIGUSR2 in section Signaling Another Process. The default action is to terminate the process.

Error: User Rate Limit Exceeded

SIGINFO: Information request. In 4.4 BSD and the GNU system, this signal is sent to all the processes in the foreground process group of the controlling terminal when the user types the STATUS character in canonical mode; see section Characters that Cause Signals. If the process is the leader of the process group, the default action is to print some status information about the system and what the process is doing. Otherwise the default is to do nothing.

Error: User Rate Limit ExceededError: User Rate Limit Exceeded

Daemon programs sometimes use SIGHUP as a signal to restart themselves, the most common reason for this being to re-read a configuration file that has been changed.

Error: User Rate Limit Exceeded

Error: User Rate Limit ExceededError: User Rate Limit Exceeded.

$ supervisorctl start someapp
someapp: started

$ supervisorctl status someapp
someapp                RUNNING    pid 16583, uptime 19:16:26

$ supervisorctl stop someapp
someapp: stopped

Error: User Rate Limit Exceededkill -lError: User Rate Limit Exceeded

$ 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

Error: User Rate Limit Exceeded

Error: User Rate Limit Exceeded

SIGINFO seems to work different on GNU libc & BSD; on BSD, it works as you describe, but on Linux, it either doesn't exist, or is the same as SIGPWR... The GNU libc manual seems incorrect in this regard (your kill -l output also doesn't show SIGINFO)... I don't know why GNU doesn't support it, because I find it to be very useful... – Carpetsmoker

SIGINFOError: User Rate Limit ExceededSIGPWRError: User Rate Limit Exceededkill -lError: User Rate Limit ExceededSIGINFOError: User Rate Limit ExceededveryError: User Rate Limit Exceeded
3

Error: User Rate Limit Exceeded

Error: User Rate Limit Exceeded

Похожие вопросы