我在做一些实验以了解有关Linux进程状态的更多信息。在超过十亿个文件的目录上执行“tar”时,进程停留在D状态
所以,有一个目录(命名big_dir),在它超过十亿的文件(目录中有很多子目录递归),然后我跑tar -cv big_dir | ssh anotherServer "tar -xv -C big_dir"
,并通过执行top
的是,tar
过程停留在d发现状态。同时,tar命令不断输出文件的路径。
我知道该进程处于D状态,因为它正在执行磁盘I/O,但为什么它的状态不在D和R之间切换?打印目录下的文件名必须使用一些CPU计算,不是吗?否则find命令怎么知道它应该打印什么?
如果我运行dd if=/dev/zero of=/dev/null
,则dd
过程状态保持在R状态从top
输出。但为什么它不是D状态?难道它一直在做I/O吗?
确实。稍后我检查了/ proc下的进程状态,并看到“状态:\t D(磁盘睡眠)SleepAVG:78%”。 – zzhang