我的守护进程(仅限linux)具有以下信号处理程序:
static void signal_handler(int id, siginfo_t *si, void *context) {
if (id == SIGTERM) {
/* prevent suicide - see below */
if (si->si_pid == getpid()) {
printf("Warning: received SIGTERM from own process\n");
return;
}
/* rest of code omitted */
}
/* rest of code omitted */
}
...在main()中安装如下:
struct sigaction sa;
memset(&sa, 0, sizeof(sa));
sa.sa_sigaction = &signal_handler;
sa.sa_flags = SA_SIGINFO;
sigaction(SIGINT, &sa, NULL);
sigaction(SIGTERM, &sa, NULL);
sigaction(SIGHUP, &sa, NULL);
信号处理程序中自杀检查的原因是,我的守护程序不时(4周一次)终止,因为它自己收到了一个SIGTERM。
我无法找到原因。程序中使用的唯一一个kill()调用就是这个:
int kill_wrapper(pid_t pid, int sig) {
if (pid <= 0 || pid == getpid())
return -1;
return kill(pid, sig);
}
代码没有单个raise()或abort()调用。
我想知道可能存在哪些可能(可能是外部)原因会导致该程序在Linux下从自身接收SIGTERM?
答案 0 :(得分:1)
见this discussion。最重要的是double lower = array[0];
for(unsigned i = 0; i < NumberOfEntries; i++) {
if(array[i] < lower) { lower = array[i]; }
}
在极少数情况下是有意义的。