原问题地址: 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读取)后再继续输出结果。