在 man 7 信号中,它描述了有关 SA_RESTART 标志何时生效的某些约束。
“慢速”设备上的 read(2)、readv(2)、write(2)、writev(2) 和 ioctl(2) 调用。 “慢速”设备是 I/O 调用可能无限期阻塞的设备,例如终端、管道或套接字。 如果慢速设备上的 I/O 调用在被信号处理程序中断时已经传输了一些数据,则该调用将返回成功状态(通常是传输的字节数)。 请注意,根据此定义,(本地)磁盘并不是慢速设备。磁盘设备上的 I/O 操作不会被信号中断。
我的问题是
谢谢。
答案比手册更容易理解。
“慢”设备是设备驱动程序可以被信号中断的设备。
大多数设备驱动程序都可以被中断。块驱动程序不能。
对于您列出的其他设备,网络设备是字符设备,并且必须是可中断的。 (数据包驱动程序只能在数据包之间中断,但这并不真正相关,因为您无法通过线路接收半个数据包......)至于 GPU 或 ASIC 加速器,我必须从字面上打开驱动程序并检查,但如果我不得不猜测,我会猜测它们不是慢速设备,因为有人必须费心去实现中断功能,但没有这样做,因为这些设备比磁盘更快。
不可中断的块设备在等待有划痕的 CD-ROM 时可能会很痛苦,但这与理论上可以永远等待的设备无法相比。