【发布时间】:2017-10-06 07:08:54
【问题描述】:
根据对这个问题的回答:Why doing I/O in Linux is uninterruptible? linux 上的 I/O 是不可中断的(在睡眠中不可中断)。但是,如果我启动一个进程,比如说文件上的一个大“dd”,并且在进程进行时我强制卸载文件系统(文件所在的位置),进程就会被杀死。理想情况下,它应该处于挂起状态,因为它正在睡觉并且是联合国。
【问题讨论】:
-
不确定您(和引用的问题)所说的“不间断 I/O”是什么意思,但处理 大量 数据肯定会被信号中断。顺便说一句,您可以手动中断
dd进程(例如使用Ctrl+C),并且进程终止相对较快。 -
我认为
dd不会使用单个文件操作——更可能是许多小文件操作。 -
@KevinBoone:实际上,
dd会调用write,字节数为bs,默认为512。 -
@Tsyvarev "uninterruptible I/O" 含义:你启动了一个 I/O 说读取操作(大)进程启动读取并进入睡眠状态,等待设备的响应,所以现在进程处于睡眠状态即使有任何信号也无法唤醒。因此不间断..
-
@rodrigo -- 确实如此。所以除非你设置了一个很大的值
bs,否则dd命令可以被中断这一事实并不能说明读/写系统调用是否可以被中断,只是关于dd中的信号处理。
标签: linux process linux-kernel filesystems signals