从自己的进程收到SIGTERM

时间:2016-01-11 19:34:32

标签: c linux signals ipc

我的守护进程(仅限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?

1 个答案:

答案 0 :(得分:1)

this discussion。最重要的是double lower = array[0]; for(unsigned i = 0; i < NumberOfEntries; i++) { if(array[i] < lower) { lower = array[i]; } } 在极少数情况下是有意义的。