注意下面注释中带“>>>>>”的位置
情况1:
#!/bin/bash
temp_fifo_file=$$.info #以当前进程号,为临时管道取名
mkfifo $temp_fifo_file #创建临时管道
exec 6<>$temp_fifo_file #创建标识为6,可以对管道进行读写
rm $temp_fifo_file #清空管道内容
function f_sleep
{
sleep 2
}
temp_thread=2 #进程数
for ((i=0;i<temp_thread;i++)) #为进程创建相应的占位
do
echo #每个echo输出一个回车,为每个进程创建一个占位
done >&6 #将占位信息写入标识为6的管道
for ((i=0;i<6;i++))
do
read #获取标识为6的占位
{
f_sleep
echo $$,$i,`date`
sleep 5
echo $$,$i,`date`
echo >&6 #>>>>>当任务执行完后,会释放管道占位,所以补充一个占位
}& #>>>>>在后台执行{}中的任务
done <&6 #将标识为6的管道作为标准输入
wait #等待所有任务完成
exec 6>&- #关闭标识为6的管道
> date ; ./thread_1.sh
Tue Jun 19 17:12:36 TAIST 2012
4032,0,Tue Jun 19 17:12:38 TAIST 2012
4032,1,Tue Jun 19 17:12:38 TAIST 2012
4032,0,Tue Jun 19 17:12:43 TAIST 2012
4032,1,Tue Jun 19 17:12:43 TAIST 2012
4032,2,Tue Jun 19 17:12:45 TAIST 2012
4032,3,Tue Jun 19 17:12:45 TAIST 2012
4032,2,Tue Jun 19 17:12:50 TAIST 2012
4032,3,Tue Jun 19 17:12:50 TAIST 2012
4032,4,Tue Jun 19 17:12:52 TAIST 2012
4032,5,Tue Jun 19 17:12:52 TAIST 20