c - 不要在 epoll_wait 中终止程序

标签 c linux signals epoll

如果 epoll_wait 被任何原因(例如 SIGINT)中断,我想处理

while ( true ) {
    n = epoll_wait ( epoll_fd, events, max_events, -1 );
    if ( errno == EINTR ) {
        ...
    }
}

但是调试器甚至没有去 if。程序在 epoll_wait 中终止。我添加了一些魔法:

signal ( SIGINT, placebo );
while ( true ) {
    n = epoll_wait ( epoll_fd, events, max_events, -1 );
    if ( errno == EINTR ) {
        ...
    }
}

一切都按预期工作。但这很丑陋。让我处理任何 epoll_wait 的中断的正确方法是什么?

最佳答案

您需要处理信号或阻止它们。如果您只想忽略 EINTR,我建议通过 sigprocmask() 或 signal(signum, SIG_IGN) 阻塞单线程进程,或通过 pthread_sigmask() 阻塞多线程进程。如果您想实际做某事,请使用 sigaction() 安装处理程序。

不要使用 signal() 来设置实际的处理程序。它的行为因 UNIX 平台而异。阅读联机帮助页以获取详细信息。

关于c - 不要在 epoll_wait 中终止程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17000036/

相关文章:

multithreading - 杀死从特权用户到根用户的信号

python - 如何获取输入 gtk.entry 字段的值并在按钮信号之外使用它

c - 在每个模块中包含标题的好习惯

c - C 中字符串的字母数字排序顺序

.net - 从使用 .NET 代码的 C++/CLI DLL 导出 C 函数

node.js - AWS EC2,pm2 : Cannot see pm2 running list

linux - 如何确定 ulimits - linux

c - 从包含数组的文件中存储/检索特定数组

linux - Linux内核中的IS_ALIGNED宏是做什么的?

C++ 类设计建议