有人可以解释命令内部实际发生的事情(调用的系统调用)ls | grep 'xxx'
吗?
问问题
1161 次
2 回答
3
首先,pipe(2,3p)
调用它是为了创建具有读写端的管道。fork(2,3p)
然后被调用两次,每个命令一次。然后dup2(2,3p)
用于用管道的每一端替换每个分叉子项中的适当文件描述符。最后exec(3)
在每个孩子中调用以实际运行命令。
于 2012-09-09T16:12:56.007 回答
2
第一个命令的标准输出作为标准输入馈送到管道中的第二个命令。有几个系统调用您可能有兴趣更详细地了解正在发生的事情,特别是 fork(2)、execve(2)、pipe(2)、dup2(2)、read(2) 和 write (2)。
实际上,shell 将 STDIN_FILENO 和 STDOUT_FILENO 分别安排为管道的读取端和写入端。当管道中的第一个进程执行 write(2) 时,该进程的标准输出被复制为管道的写入端,类似地,当第二个进程对标准输入执行 read(2) 时,它最终从管道的读取端。
当然还有更多细节需要考虑,请查看 Richard Stevens 的书籍,如 UNIX 环境中的高级编程。
于 2012-09-09T16:14:02.780 回答