子流程执行顺序似乎有误,但可以

时间:2019-07-10 10:42:20

标签: c macos pipe fork file-descriptor

以下代码为什么执行命令:

  

“ cat / etc / passwd | wc -l”

而不是

  

“ wc -l | cat / etc / passwd”?

即使调试语句按顺序

  

b

     

a

onBindViewHilder

2 个答案:

答案 0 :(得分:1)

使用pipedup2close决定了两个进程的连接方式,而不是执行顺序。首先运行的进程可能会阻塞readwrite对管道的访问,直到另一个分别发送或接收数据为止。

执行顺序不能错误,因为未指定执行顺序。父母或孩子中的任何一个都可能需要等待,调度程序不保证资源的公平分配。也许创建子进程需要一些时间,所以父进程可能会达到

write(stdOut, "b\n", 2);

孩子到达之前

write(stdOut, "a\n", 2);

答案 1 :(得分:1)

标记ab的显示顺序与通过管道发生的操作无关。
在它们产生的那一刻,两个过程之间没有同步。
cat命令写入其标准输出,该输出将重定向到管道的 write 端。
wc命令从其标准输入中读取,该输入从管道的 read 端重定向。
因此,无论如何,数据将通过管道从catwc

相关问题