我正在Linux中使用实时信号来通知串行端口中新数据的到来.不幸的是,这会导致睡眠呼叫在有信号时被中断.
有人知道避免这种行为的方法吗?
我尝试使用常规信号(SIGUSR1),但我仍然保持相同的行为.
Mar*_*oek 14
来自nanosleep手册页:
nanosleep延迟程序的执行至少在*req中指定的时间.如果已将信号传递给过程,则该函数可以更早地返回.在这种情况下,它返回-1,将errno设置为EINTR,并将剩余时间写入rem指向的结构,除非rem为NULL.然后可以使用*rem的值再次调用nanosleep并完成指定的暂停.
您可以SIGKILL使用sigprocmask()或signal()调用几乎所有信号(除外).第一个将返回您之前的掩码,您可以在之后恢复sleep().这里有一些例子.如果这没有帮助,请详细说明什么信号会打断你的睡眠.我想,您还可以检查这种情况("睡眠被信号中断?")并再次进入睡眠状态.
较新的Linux内核支持signalfd(2).这与sigprocmask(2)一起,是在单个epoll_wait(2)调用中组合处理信号和IO事件的一种非常好的方法.
| 归档时间: | 
 | 
| 查看次数: | 9684 次 | 
| 最近记录: |