【发布时间】:2013-09-18 15:01:00
【问题描述】:
在 unix 中执行“cat filename | grep诗歌| wc -l”命令时将使用多少个进程。 会不会有1个进程,2个进程,3个进程……来执行上面的命令。
【问题讨论】:
-
至少一个太多,因为您不必在示例中使用
cat。 -
为什么标记为 C?
标签: linux shell unix command-line process
在 unix 中执行“cat filename | grep诗歌| wc -l”命令时将使用多少个进程。 会不会有1个进程,2个进程,3个进程……来执行上面的命令。
【问题讨论】:
cat。
标签: linux shell unix command-line process
它实际上取决于外壳。在 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 可以通过防止不必要地使用子外壳来优化管道的执行,可能在较新的版本中。
【讨论】:
管道从第一个进程获取输出流,并将其作为下一个进程的输入流。保证每个命令都有一个进程,但每个进程都可能根据其操作创建子进程。
【讨论】: