pipe

作者: Ary_zz | 来源:发表于2020-02-21 14:14 被阅读0次

    2020-02-21

    cat test.txt | grep 'hello'
    

    这行命令表示在test.txt文件中查找包含单词'hello'的句子。我们先解释下这行命令是怎么实现的;

    我们知道终端也是一个进程,当我们输入一个命令执行时,其实是终端程序调用fork和exec产生一个子进程执行命令程序;当终端在执行这行命令时,会先解析输入的参数,当发现输入的命令行中有‘|’符号时,就会知道在命令行中包含了管道,因此,在终端程序中:

    • 会先fork出一个子进程,并执行exec将cat载入内存;
    • 接着在cat程序中,用函数pipe定义出管道;
    • 在定义出管道之后,再调用fork,生成一个子进程;
    • 在父进程cat中关闭管道读端,将cat进程的标准输出重定向到管道的写端;
    • 在子进程中将管道的写端关闭,将标准输入重定向到管道的读端,再调用exec将grep进程载入内存;
    • 最后,cat的输出就可以最为grep的输入了;

    这里需要说明的是,父进程cat对管道的操作必须在fork之前,否则父进程cat对管道的操作会继承到子进程,这样会导致子进程无法读取父进程的数据

    相关文章

      网友评论

          本文标题:pipe

          本文链接:https://www.haomeiwen.com/subject/znecqhtx.html