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对管道的操作会继承到子进程,这样会导致子进程无法读取父进程的数据

相关文章

  • 聊聊storagetapper的pipe

    序 本文主要研究一下storagetapper的pipe Pipe storagetapper/pipe/pipe...

  • NIO十二-Pipe

    Java NIO Pipe Creating a Pipe Writing to a Pipe Reading f...

  • Angular Pipe

    Angular Pipe is object, not function, when pipe created, ...

  • python 学习笔记(Queue & Pipe 进程间的通讯)

    Pipe multiprocessing.Pipe()即管道模式,调用Pipe()返回管道的两端的Connecti...

  • 自定义pipe

    自定义pipe pipe说明:(自定义pipe只需实现 PipeTransform接口的transform方法即可 )

  • Linux IPC

    Pipe Named Pipe Signal Semaphore Message Queue Memory Sha...

  • Linux IPC

    Pipe/FIFO(named Pipe)/Semaphore/Message Queue/Share Memor...

  • 管道

    man 7 PIPE pipe和FIFO介绍pipe匿名管道,只能用于有亲缘关系的进程间通信FIFO命名管道,任意...

  • Android进程间通信机制-管道

    PIPE和FIFO的使用及原理 PIPE和FIFO都是指管道,只是PIPE独指匿名管道,FIFO独指有名管道,我们...

  • ng2 内置pipe 一览

    ng2 内置pipe 一览 pipe说明: UpperCasePipe --- Transforms text ...

网友评论

      本文标题:pipe

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