gpt4 book ai didi

c - 从自己的进程接收到 SIGTERM

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:48:08 28 4
gpt4 key购买 nike

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

最佳答案

参见 this discussion .底线是 si_pid 在极少数情况下有意义。

关于c - 从自己的进程接收到 SIGTERM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34729590/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com