Я делал несколько экспериментов, чтобы узнать больше о состояниях процессов Linux.
Итак, есть каталог (с именем big_dir) с более чем миллиардом файлов в нем (каталог имеет много подкаталогов рекурсивно), а затем я запускаю tar -cv big_dir | ssh anotherServer «tar -xv -C big_dir»
и узнал, выполнив top
, что процесс tar
остается в статусе D. Между тем, команда tar продолжает выводить пути к файлам.
Я знаю, что процесс был в статусе D, потому что он делал дисковый ввод-вывод, но почему его статус не переключился между D и R? Печать имен файлов в каталоге должна была использовать некоторое вычисление ЦП, не так ли? В противном случае, как команда find могла знать, что она должна что-то печатать?
Если я запустил dd if =/dev/zero of =/dev/null
, то статус процесса dd
сохранен в статусе R из top
вывод. Но почему это не было в статусе D? Разве это не все время делает I/O?