写脚本的时候用到FIFO,不是很会,就学习了下。下面是简介:
FIFO也称为有名管道,它是一种文件类型。FIFO简单理解,就是它能把两个不相关的进程联系起来,FIFO就像一个公共通道,解决了不同进程之间的“代沟”。普通的无名管道只能让相关的进程进行沟通(比如父shell和子shell之间)。还是用代码来说明问题好了。
下面我模拟了一个FIFO通信的过程,主要有两个进程。
#!/bin/bash #Client.sh #不断向fifo写入数据 tmp_fifo="/tmp/test.fifo" rm -f $tmp_fifo mkfifo $tmp_fifo exec 6<>$tmp_fifo #这句话能把管道变成非阻塞! i=0 while : do sleep 1 # 1秒写一次 echo "$i" >&6 echo "$i" #输出到终端的时候要小心,会覆盖你的终端,所以要停止,最好直接挂起进程!! let i++ done exec 6>&-
#!/bin/bash #Server.sh #不断从fifo中读出数据 tmp_fifo="/tmp/test.fifo" echo "$tmp_fifo" exec 6<>$tmp_fifo #建立一个绑定 while : do read TEXT sleep 1 echo "$TEXT" #每1s就读取一个数据,并且打印到终端,要停止,最好挂起进程! done <&6
你就能看到在终端B中从fifo中读取到的数据,你要是在终端B中把每次读fifo的间隔给改成2秒,就更能说明问题了。上面的程序,在实验的时候最好通过不断挂起A进程来查看,然后观察B进程的输出。你会知道FIFO整个是怎么跑的。。。这里就不详细解释了!(最近太累了~~~)
FIFO的出现,极好地解决了系统在应用过程中产生的大量的中间临时文件的问题。FIFO可以被shell调用使数据从一个进程到另一个进程,系统不必为该中间通道去烦恼清理不必要的垃圾,或者去释放该通道的资源,它可以被留做后来的进程使用。并且规避了匿名管道在作用域的限制,可应用于不相关的进程之间。