中断读取()信号

eva*_*ing 4 c linux multithreading posix signals

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

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

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

alk*_*alk 5

read()返回EINTR,请在安装信号处理程序时传入调用SA_RESTART的成员sa_flags中取消设置.struct sigactionsigaction()SIGINT


另一种方法是避免阻塞read().请查看此问题的答案:如何避免阻止读取功能?


mic*_*slm 4

关于从串行端口读取时实现 read() 超时的上一个问题的公认答案显示了如何使用超时执行读取。因此,您发送的 SIGINT 信号最终将被执行。select(2)