Объясните, сколько процессов создано? - PullRequest
3 голосов
/ 15 января 2012

Может ли кто-нибудь ответить, сколько процессов создано в каждом случае для команд ниже, как я не понимаю:

Следующие три команды имеют примерно одинаковый эффект:

  1. rm $(find . -type f -name '*.o')
  2. find . -type f -name '*.o' | xargs rm
  3. find . -type f -name '*.o' -exec rm {} \;

1 Ответ

4 голосов
/ 15 января 2012
  1. Ровно 2 процесса - 1 для rm, другой для find.
  2. 3 или более процессов.1 для find, другой для xargs и один или несколько rm.xargs будет читать стандартный ввод, и если он читает больше строк, чем может быть передано в качестве параметров в программу (существует максимальное значение с именем ARG_MAX).
  3. Многие процессы, 1 для find ипо одному для каждого файла, оканчивающегося на .o для rm.

На мой взгляд, вариант 2 - лучший, поскольку он правильно обрабатывает ограничение максимального параметра и не порождает слишком много процессов.,Однако я предпочитаю использовать его следующим образом (с GNU find и xargs):

find . -type f -name '*.o' -print0 | xargs -0 rm

Это завершает каждое имя файла \0 вместо новой строки, так как имена файлов в UNIX могут по закону содержать новые строки.Это также правильно обрабатывает пробелы в именах файлов (гораздо чаще).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...