当前位置:  开发笔记 > 运维 > 正文

命令管道如何在*NIX中工作?

如何解决《命令管道如何在*NIX中工作?》经验,为你挑选了2个好方法。

当我这样做:

find . -name "pattern" | grep "another-pattern"

是过程,find并且grep,催生了一起?我的猜测是肯定的.如果是这样,那么这是如何工作的?:

yes | command_that_prompts_for_confirmations

如果yes不断向stdout发送'y'并在command_that_prompts_for_confirmations读取stdin时读取'y',那么如何yes知道何时终止?因为如果我yes单独运行而不将其输出传递给其他命令,它就永远不会结束.

但是如果管道命令不能同时产生所有进程,那么如何yes知道要输出多少?这对我来说是22.有人能解释一下这个管道在*NIX中是如何工作的吗?



1> Nick Fortesc..:

从维基百科页面:"本身,yes命令输出'y'或任何被指定为参数,然后是换行符,直到被用户停止或以其他方式被杀死;当用管道输入命令时,它将继续直到管道中断(即程序完成执行)."

yes不知道何时终止.但是,在某些时候输出"y"到stdout将导致错误,因为另一个进程已经完成,这将导致管道损坏,并且是将终止.

顺序是:

    其他程序终止

    操作系统关闭管道

    是尝试输出字符

    发生错误(破管)

    是终止



2> David Dean..:

是的,(一般来说)管道中的所有流程都是一起产生的.关于yes和类似的情况,信号被传递回管道以指示它不再接受输入.具体来说:SIGPIPE详情在这里和这里.维基百科上提供了有关*nix流水线的更多有趣信息.

SIGPIPE如果您因为Broken Pipe出错而中断了一个不期望它的命令,您可以看到该操作.我似乎无法找到一个在我的Ubuntu设置上做到这一点的例子.

推荐阅读
黄晓敏3023
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有