gpt4 book ai didi

无法使用 sigaction 函数捕获 SIGTERM

转载 作者:太空宇宙 更新时间:2023-11-04 04:38:15 25 4
gpt4 key购买 nike

我编译了程序。启动它并等待。我打开另一个终端,并使用命令“kill pid”或“kill -15 pid”或“kill -SIGTERM pid”(将 PID 替换为实际进程 ID)终止所有正在运行的程序。被杀死的程序退出,但无法捕获 SIGTERM 以打印“完成”。

我在这里复制代码:https://airtower.wordpress.com/2010/06/16/catch-sigterm-exit-gracefully/ .

有什么可以帮您的吗?感谢所有的回答。

#include <signal.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>

volatile sig_atomic_t done = 0;

void term(int signum)
{
done = 1;
}

int main(int argc, char *argv[])
{
struct sigaction action;
memset(&action, 0, sizeof(struct sigaction));
action.sa_handler = term;
sigaction(SIGTERM, &action, NULL);

int loop = 0;
while (!done)
{
int t = sleep(3);
/* sleep returns the number of seconds left if
* interrupted */
while (t > 0)
{
printf("Loop run was interrupted with %d "
"sec to go, finishing...\n", t);
t = sleep(t);
}
printf("Finished loop run %d.\n", loop++);
}

printf("done.\n");
return 0;
}

最佳答案

您需要正确设置信号处理程序才能处理要捕获的信号。这就是我处理信号的方式:

static void handle_signal(int signum); //in header, then implement

//in the source file
struct sigaction myaction;
myaction.sa_handler = handle_signal;
myaction.sa_flags = 0; //or whatever flags you want but do it here so the signals you register see these flags

sigset_t mask;
sigemptyset(&mask);

sigaddset(&mask, SIGTERM);
sigaction(SIGTERM, &myaction, NULL);

myaction.sa_mask = mask;

我能够捕获 SIGTERM 以及我在那里注册的所有其他信号(到 sigaddsetsigaction)。

关于无法使用 sigaction 函数捕获 SIGTERM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29096907/

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