我有一个连续读取数据串口的线程。 如果主程序收到SIGINT,则在串行端口线程上调用g_thread_join()。
但是,由于读取阻塞,串口线程将不会返回并且程序停止,直到我在串行线上获得一个字节然后它就可以退出。
有没有办法将SIGINT传递给read(),以便在主线程需要时可以强制它返回?
答案 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信号最终将被执行。