我最近写了一个简单的shell.我实现管道时出现了这个问题.
我知道在Ubuntu命令行参数的最大长度为2097152.(通过此)
#define MAX_CMD_LEN 2097152
Run Code Online (Sandbox Code Playgroud)
但我想知道是否有最大数量的管道命令?例如:( n的数量)
ps -aux |?grep "a.out" | awk '{print $5}' | top | ... | cat
1 | 2 | 3 | 4 | ... | n
Run Code Online (Sandbox Code Playgroud)
不,没有这样的限制.对于单个进程表条目,ARG_MAX适用(组合环境和argv长度).但是,管道跨越单独的进程表条目,并且每个部分仅连接到它之前的进程(通过stdin)和之后的进程(通过stdout).没有一个地方需要将整个管道作为一个单元存储或跟踪在操作系统本身内部(而不是构造外壳).