它背后的理由是什么? 如果允许进行I / O的进程处理信号,会有什么坏结果呢?
根据Linux开发者文档 ,这是为了防止数据丢失,并避免硬件进入不一致的状态。
想象一下,如果一个read()
(例如来自磁盘)是可中断的,并且信号处理程序(除其他职责之外)改变了读缓冲区,会发生什么情况。 由于信号是异步的,读取结果将不可重现。 如果写作中断,类似的混乱也会随之而来。
现在我读了Maurice Bach的“Unix操作系统的设计”一书,让我自己来回答这个问题。
总之,使I / O不中断是为了使I / O任务尽快完成,而不受信号的干扰。
我从书中获得的一些相关知识: