gpt4 book ai didi

c - "kill -15"触发 sigaction 代码但不终止我的 C 程序

转载 作者:可可西里 更新时间:2023-11-01 11:43:35 26 4
gpt4 key购买 nike

我有一个用 C 开发的程序。我在这个程序中添加了一个 sigaction 处理程序,以便在退出程序之前执行一些 C 代码:

void signal_term_handler(int sig)
{
printf("EXIT :TERM signal Received!\n");
int rc = flock(pid_file, LOCK_UN | LOCK_NB);
if(rc) {
char *piderr = "PID file unlock failed!";
fprintf(stderr, "%s\n", piderr);
printf(piderr);
}
exit(EXIT_SUCCESS);
}

int main(int argc, char **argv)
{
struct sigaction sigint_action;

sigint_action.sa_handler = &signal_term_handler;
sigemptyset(&sigint_action.sa_mask);

sigint_action.sa_flags = SA_RESETHAND;
sigaction(SIGTERM, &sigint_action, NULL);
...........
}

注意:我的程序包含2个运行的子线程

当我执行我的程序然后我调用 kill -15 <pidnumber>杀死我的程序。我收到消息 "EXIT :TERM signal Received!\n "打印在标准输出中,但程序没有退出。

我的 sigaction 代码中是否遗漏了什么?

最佳答案

exit() 不一定是异步信号安全的。

要直接从信号处理程序调用 _exit()abort() 结束进程。


flock()printf 函数家族的所有成员也不是 async-signal-save。


有关异步信号安全功能的完整列表,您可能想要 click here .

关于c - "kill -15"触发 sigaction 代码但不终止我的 C 程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16966353/

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