中断读取()信号

时间:2014-02-21 15:42:55

标签: c linux multithreading signals posix

我有一个连续读取数据串口的线程。 如果主程序收到SIGINT,则在串行端口线程上调用g_thread_join()。

但是,由于读取阻塞,串口线程将不会返回并且程序停止,直到我在串行线上获得一个字节然后它就可以退出。

有没有办法将SIGINT传递给read(),以便在主线程需要时可以强制它返回?

2 个答案:

答案 0 :(得分:5)

要让read()返回EINTR,请在安装时SA_RESTART的成员sa_flags中取消设置struct sigaction SIGINT的信号处理程序。


另一种方法是避免阻塞read()。请参阅此问题的答案:sigaction()

答案 1 :(得分:4)

accepted answer上前一个问题的implementing timeout for read() when reading from a serial port显示了如何使用select(2)执行超时读取。因此,您发送的SIGINT信号最终将被执行。