我正在做一些实验来了解更多关于 Linux 进程状态的信息。
所以,有一个目录(名为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
进程状态从top
输出中保持为 R 状态。但是为什么不是D状态呢?它不是一直在做 I/O 吗?