【问题标题】:How many process will be used when command having pipes is executed in unix?在 unix 中执行带有管道的命令时将使用多少个进程?
【发布时间】:2013-09-18 15:01:00
【问题描述】:

在 unix 中执行“cat filename | grep诗歌| wc -l”命令时将使用多少个进程。 会不会有1个进程,2个进程,3个进程……来执行上面的命令。

【问题讨论】:

  • 至少一个太多,因为您不必在示例中使用cat
  • 为什么标记为 C?

标签: linux shell unix command-line process


【解决方案1】:

它实际上取决于外壳。在 bash 中应该有 3 个进程。我在后台运行了 3 个 sleep 来代替这些命令,然后运行 ​​pstree。这是我得到的:

> sleep 4s | sleep 4s | sleep 4s & pstree
 │         ├─bash───bash─┬─pstree
 │         │             ├─3*[sleep]

在子shell中:

> ( sleep 4s | sleep 4s | sleep 4s ) & pstree
 │         ├─bash───bash─┬─bash───3*[sleep]
 │         │             ├─pstree

更新:

这并没有正确展示 bash 在执行管道时的行为,因为将它们置于后台会影响执行的子 shell 的数量。我建议在前台运行它们,然后在观察时检查另一个终端中的进程数。 Bash 可以通过防止不必要地使用子外壳来优化管道的执行,可能在较新的版本中。

【讨论】:

    【解决方案2】:

    管道从第一个进程获取输出流,并将其作为下一个进程的输入流。保证每个命令都有一个进程,但每个进程都可能根据其操作创建子进程。

    【讨论】:

    • 已经开始了三个,但是既然他说的是“二手”,也许我们应该算一个作为将所有东西放在一起的外壳?
    • @user814064 好点。我想这是一个相对的问题。我们需要更多信息才能更具体。我已将我的解决方案更改为更通用一些。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-07
    • 2014-04-13
    • 2011-08-31
    • 1970-01-01
    相关资源
    最近更新 更多