用管道连接的两个命令谁先运行

原问题地址: http://bbs.chinaunix.net/thread-1074470-1-1.html


问题:
如果执行这样一条命令:ls | tee abc
那么请问是先执行ls命令再生成abc文件呢,还是先生成abc文件再执行ls命令呢?


lgfang的回复:

简单来讲应该是两个命令同时运行。
从编程的角度来看,两个命令对应两个进程,这两个进程的创建是有先后的(具体顺序不定,可参看 APUE)。但是这个“先后”并不是一个进程结束后再起另一个,而是顺序将两进程都启动起来,然后由调度器来调度。所以从用户的角度来看,应该说两个同时运行。

.......

为什么要瞎猜(试)呢?
APUE 上说得算是比较清楚了。两个进程究竟先起那一个是不一定的,或者说因shell而异。
至于说究竟是先生成文件还是先‘ls’,想想UNIX下程序的工作原理就知道这也是不确定的呀:两个进程起来后在操作系统的调度下轮流使用CPU,所以究竟哪个进程的哪些指令先执行是不确定的。我认为唯一能确定的是 tee会阻塞在读操作上直到读到足够输入(不知道有没有缓冲)后再写入到文件中,而'ls'会阻塞到其标准输出可写(被tee读取)后再继续输出结果。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值