我在做一些實驗以瞭解有關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