来自关于信号处理的GNU 文档:
SIGUSR1 和 SIGUSR2 信号被放在一边,供您以任何方式使用。如果您在接收信号的程序中为它们编写信号处理程序,它们对于简单的进程间通信很有用。在 Signaling Another Process 部分中有一个示例显示了 SIGUSR1 和 SIGUSR2 的使用。
默认操作是终止进程。
SIGINFO 的默认操作是什么都不做,所以它可能更合适:
SIGINFO:信息请求。在 4.4 BSD 和 GNU 系统中,当用户在规范模式下键入 STATUS 字符时,该信号被发送到控制终端的前台进程组中的所有进程;请参阅导致信号的字符部分。如果进程是进程组的leader,默认的动作是打印一些关于系统的状态信息以及进程在做什么。否则默认是什么都不做。
SIGHUP在控制终端关闭时发出,但由于大多数守护程序未连接到终端,因此将其用作“重新加载”并不少见:
守护程序有时使用 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