我的守护程序(仅限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下从自己接收SIGTATH?
最佳答案
见this discussion。底线是si_pid
在极少数情况下是有意义的。
关于c - 从自己的流程收到SIGTERM,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34729590/