gpt4 book ai didi

c - 为什么要触发两次 SIGINT 才能按预期工作?

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

这里我有一些代码示例:

/* some headers */

/****************/

void handler( int signum ){
printf("Signal number: %d received\n", signum);
signal(signum, SIG_DFL);
}

int main( int argc, char* argv[] ){
signal(SIGINT, handler);

while( "no signal was received" ){
printf("another loop round\n");
sleep(3);
}

return EXIT_SUCCESS;
}

我期待我的程序退出,消息在我的处理函数中定义,在 CTRL + C 键盘组合之后,就像它通常发生的那样,但我必须输入命令两次并且只有在我第二次尝试后它才会停止.我还想问另一个关于 signal 函数的问题。我找到了很多引用资料,人们会建议使用 sigaction 函数而不是 signal,但其中一些人说出于兼容性原因使用它会更好信号。你能给我一些关于我应该使用哪个的提示吗?提前致谢

最佳答案

用这条线

signal(SIGINT, handler);

您通过调用 handler() 替换了默认行为,即退出程序。这就是程序在接收到信号时不会退出的原因。

handler() 然后调用

signal(signum, SIG_DFL);

重新设置 SIGINT 的默认行为,即在(下一次)接收到信号时退出程序。


OT:不应从信号处理程序中调用 printf()(以及其他),因为它(和其他)不能保证是异步信号安全的。参见 man 7 signal有关这些功能的列表。

关于c - 为什么要触发两次 SIGINT 才能按预期工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25959603/

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