linux - 在unix下执行有管道的命令会使用多少个进程?

标签 linux shell unix command-line process

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

最佳答案

这实际上取决于 shell。在 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 可以通过防止不必要的子 shell 的使用来优化管道的执行,可能在较新的版本中。

关于linux - 在unix下执行有管道的命令会使用多少个进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18794520/

相关文章:

c - 出现段错误。不知道为什么

linux - 如何剪切文件中包含三位数字的单词 (100) - shell 脚本

c - gdb 断点在错误的行号中命中

python - 无法通过管道命令访问 django shell 中的导入函数?

git别名删除本地和远程

bash - 使用自定义命令完成行

c - 在 linux 中保存 session 或进程状态

c++ - linux 上的 c++ 交叉编译到 windows

linux - 在 Shell 脚本中解析 CSV 字符串并将其写入文件

linux - bash:当它是进程重定向的结果时执行 $0