解释创建了多少进程?

时间:2012-01-15 18:25:32

标签: shell process find

有人可以回答下面的命令在每种情况下创建了多少个进程,因为我不理解它:

以下三个命令具有大致相同的效果:

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

1 个答案:

答案 0 :(得分:4)

  1. 正好有2个流程 - 1个用于rm,另一个用于find
  2. 3个或更多个过程。 1代表find,另一代代表xargs,还有一个或多个rmxargs将读取标准输入,如果它读取的行数超过可作为参数传递给程序的行(有一个名为ARG_MAX的最大值)。
  3. 许多流程,1个用于find,另一个用于.o rm的每个文件。
  4. 在我看来,选项2是最好的,因为它正确处理最大参数限制并且不会产生太多进程。但是,我更喜欢这样使用它(使用GNU find和xargs):

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

    这会使用\0而不是换行符终止每个文件名,因为UNIX中的文件名可以合法地包含换行符。这也正确地处理文件名中的空格(更常见)。