Как может обработать выполнение “vfork без должностного лица”, заканчиваются в длинном бесперебойном сне?

Вам не нужно это дополнительное ls -tr. Это эквивалентно Вашей команде и быстрее:

find . -type f | xargs stat --printf="%y %n\n" | sort -n

Что-то вроде этого исключит подкаталог файлов:

find . -type f ! -path './directory/to/ignore/*' \
     | xargs stat --printf="%y %n\n" \
     | sort -n

Это все еще проверит каждый файл, если Вы захотите проигнорировать все использование подкаталога -prune. Необходимо будет переупорядочить вещи немного так, чтобы мы не находили все файлы сначала.

find . -path './directory/to/ignore' -prune -o -type f -print0 \
     | xargs -0 stat --printf="%y %n\n" \
     | sort -n

И в интересах к тому, чтобы быть максимально эффективным, stat было избыточно, данная находка уже получает доступ к файлу. Таким образом, Вы на самом деле поражаете файловую систему 2X find ... | stat ... приблизьтесь, таким образом, вот более эффективный способ, который имеет find выполнение всей работы.

find . -path './directory/to/ignore' -prune -o -printf '%t %p\n' 
     | sort -n

Чтобы заставить эту версию работать, я должен был адаптировать printf директивы с тех пор stat и find используйте различные для различных метаданных файловой системы.

Ссылки

5
23.05.2017, 15:40
1 ответ

Когда процесс вызывает vfork , родительский элемент остается в состоянии D, пока дочерний элемент не выполнил _exit или execve (единственные две авторизованные функции, вместе с родственниками execve , такими как execvp и т. Д.). Родитель все еще выполняет вызов vfork , поэтому он находится в состоянии D.

Если дочерний элемент делает что-то подобное (что глупо, но допустимо), родитель останется в состоянии D на неопределенное время, в то время как ребенок будет оставаться в состоянии R бесконечно долго.

if (!vfork()) while (1) {}
6
27.01.2020, 20:38

Теги

Похожие вопросы