在等待文件描述符返回
read()或
write()从文件描述符返回时,该过程将进入一种特殊的睡眠状态,称为“
D”或“磁盘睡眠”。这很特别,因为在这种状态下不能终止或中断该进程。等待ioctl()返回的进程也将以这种方式进入睡眠状态。
例外情况是,当文件(例如终端或其他字符设备)以
O_NONBLOCK模式打开时,如果假定文件(例如调制解调器)需要时间来初始化,则通过该文件。但是,您在问题中指出了阻止设备。另外,我从未尝试过以
ioctl()非阻塞模式打开的fd很可能会阻塞的(至少是在不知情的情况下)。
如何选择另一个进程完全取决于您使用的调度程序,以及其他进程可能在该调度程序中修改其权重的方法。
已知某些情况下的某些用户空间程序会一直保持这种状态,直到重新启动为止。这些通常与其他“僵尸”归为一类,但由于它们在技术上并未失效,因此该术语不正确。



