从GNU docs约信号处理:
的SIGUSR1和SIGUSR2信号预留供您使用任何你想要的方式。如果您在接收信号的程序中为它们编写信号处理程序,它们对于简单的进程间通信非常有用。 有一个示例显示SIGUSR1和SIGUSR2在Signaling Another Process部分中的使用。 默认操作是终止进程。
为SIGINFO默认的动作是什么也不做,所以它可能更适合:
SIGINFO:信息请求。在4.4 BSD和GNU系统中,当用户在规范模式下键入STATUS字符时,该信号被发送到控制终端的前台进程组中的所有进程;请参阅导致信号的字符一节。 如果进程是进程组的负责人,那么缺省操作是打印有关系统的某些状态信息以及进程正在执行的操作。 否则默认是不做任何事。当控制终端关闭
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
[更新]
关于Linux和BSD系统之间的行为差异Carpetsmoker评论:
SIGINFO似乎libc的& BSD上工作GNU不同;在BSD上,它的工作原理与你描述的一样,但在Linux上它不存在,或者与SIGPWR一样... GNU libc手册在这方面似乎不正确(你的kill -l输出也不显示SIGINFO )...我不知道为什么GNU不支持它,因为我觉得它非常有用...... - Carpetsmoker
“...我知道这是坏的,但这不是点“ - 你把牛奶放在我的鼻子:) +1。 – jww