以下代码为什么执行命令:
“ cat / etc / passwd | wc -l”
而不是
“ wc -l | cat / etc / passwd”?
即使调试语句按顺序
b
a
onBindViewHilder
答案 0 :(得分:1)
使用pipe
,dup2
和close
决定了两个进程的连接方式,而不是执行顺序。首先运行的进程可能会阻塞read
或write
对管道的访问,直到另一个分别发送或接收数据为止。
执行顺序不能错误,因为未指定执行顺序。父母或孩子中的任何一个都可能需要等待,调度程序不保证资源的公平分配。也许创建子进程需要一些时间,所以父进程可能会达到
write(stdOut, "b\n", 2);
孩子到达之前
write(stdOut, "a\n", 2);
答案 1 :(得分:1)
标记a
和b
的显示顺序与通过管道发生的操作无关。
在它们产生的那一刻,两个过程之间没有同步。
cat
命令写入其标准输出,该输出将重定向到管道的 write 端。
wc
命令从其标准输入中读取,该输入从管道的 read 端重定向。
因此,无论如何,数据将通过管道从cat
到wc
。