Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux中的不间断写入_Linux_Process_Linux Kernel_Filesystems_Signals - Fatal编程技术网

Linux中的不间断写入

Linux中的不间断写入,linux,process,linux-kernel,filesystems,signals,Linux,Process,Linux Kernel,Filesystems,Signals,根据对这个问题的回答:linux上的I/O是不可中断的(在睡眠中是不可中断的)。但是如果我启动一个进程,比如说在一个文件上启动一个大的'dd',当进程进行时,我强制卸载文件系统(文件所在的位置),进程就会被终止。理想情况下,它应该处于挂起状态,因为它处于休眠状态,并且是不可中断的。“不可中断”适用于内核处理的低级读/写操作。在C编程中,这些调用大致对应于C标准库上的read()和write()调用。实用程序可以被中断并不能说明I/O操作是否可以被中断,因为实用程序中的特定文件操作可能对应于许多低

根据对这个问题的回答:linux上的I/O是不可中断的(在睡眠中是不可中断的)。但是如果我启动一个进程,比如说在一个文件上启动一个大的'dd',当进程进行时,我强制卸载文件系统(文件所在的位置),进程就会被终止。理想情况下,它应该处于挂起状态,因为它处于休眠状态,并且是不可中断的。

“不可中断”适用于内核处理的低级读/写操作。在C编程中,这些调用大致对应于C标准库上的
read()
write()
调用。实用程序可以被中断并不能说明I/O操作是否可以被中断,因为实用程序中的特定文件操作可能对应于许多低级I/O操作


dd
的情况下,默认传输块大小为512字节,因此复制一个大文件可能包含许多I/O操作<代码>dd可以在这些操作之间中断。我希望这同样适用于大多数对文件进行操作的实用程序。如果您可以强制它们处理巨大的数据块(例如,在
dd
中为
bs=
指定一个千兆字节大小的参数),那么您可能会看到低级I/O操作是不可中断的。

不确定您(以及引用的问题)所说的“不可中断I/O”是什么意思,但处理大量数据肯定会被信号中断。顺便说一句,您可以手动中断
dd
进程(例如,使用
Ctrl+C
),进程终止速度相对较快。我不认为
dd
将使用单个文件操作,更可能是许多小文件操作。@KevinBoone:实际上,
dd
将使用
bs
字节数调用
write
,默认值为
512
@Tsyvarev“不间断I/O”意思是:您启动了一个I/O操作,比如说读取操作(大型)进程启动了读取并进入睡眠状态,等待设备的响应,所以现在进程处于睡眠状态,甚至无法被任何信号唤醒。因此是不间断的。@rodrigo——确实如此。因此,除非您将
bs
设置为一个很大的值,否则
dd
命令可以被中断的事实并不能说明读/写系统调用是否可以被中断,只能说明
dd
中的信号处理,当我说I/O操作时,我指的是系统调用。两个I/O之间很可能发生“卸载”,因此它从未进入睡眠状态,并被信号杀死。我将尝试使用非常大的块大小的“dd”,看看如何对卸载做出反应。