SHELL中的使用fifo管道实现多进程运行效率
2012-09-11 17:34
239 查看
注意下面注释中带“>>>>>”的位置
情况1:
情况2:
情况3:
情况4:
情况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 2012 4032,4,Tue Jun 19 17:12:57 TAIST 2012 4032,5,Tue Jun 19 17:12:57 TAIST 2012 21s
情况2:
#!/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:18:28 TAIST 2012 6288,0,Tue Jun 19 17:18:30 TAIST 2012 6288,0,Tue Jun 19 17:18:33 TAIST 2012 6288,1,Tue Jun 19 17:18:35 TAIST 2012 6288,1,Tue Jun 19 17:18:38 TAIST 2012 6288,2,Tue Jun 19 17:18:40 TAIST 2012 6288,2,Tue Jun 19 17:18:43 TAIST 2012 6288,3,Tue Jun 19 17:18:45 TAIST 2012 6288,3,Tue Jun 19 17:18:48 TAIST 2012 6288,4,Tue Jun 19 17:18:50 TAIST 2012 6288,4,Tue Jun 19 17:18:53 TAIST 2012 6288,5,Tue Jun 19 17:18:55 TAIST 2012 6288,5,Tue Jun 19 17:18:58 TAIST 2012 30s
情况3:
#!/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 echo >&6 #>>>>>当任务执行完后,会释放管道占位,所以补充一个占位 } 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` done <&6 #将标识为6的管道作为标准输入 wait #等待所有任务完成 exec 6>&- #关闭标识为6的管道
> date ; ./thread_1.sh Tue Jun 19 17:17:06 TAIST 2012 5777,0,Tue Jun 19 17:17:08 TAIST 2012 5777,0,Tue Jun 19 17:17:11 TAIST 2012 5777,1,Tue Jun 19 17:17:13 TAIST 2012 5777,1,Tue Jun 19 17:17:16 TAIST 2012 5777,2,Tue Jun 19 17:17:18 TAIST 2012 5777,2,Tue Jun 19 17:17:21 TAIST 2012 5777,3,Tue Jun 19 17:17:23 TAIST 2012 5777,3,Tue Jun 19 17:17:26 TAIST 2012 5777,4,Tue Jun 19 17:17:28 TAIST 2012 5777,4,Tue Jun 19 17:17:31 TAIST 2012 5777,5,Tue Jun 19 17:17:33 TAIST 2012 5777,5,Tue Jun 19 17:17:36 TAIST 2012 30s
情况4:
#!/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 echo >&6 #>>>>>当任务执行完后,会释放管道占位,所以补充一个占位 } 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` }& #>>>>>在后台执行{}中的任务 done <&6 #将标识为6的管道作为标准输入 wait #等待所有任务完成 exec 6>&- #关闭标识为6的管道
> date ; ./thread_1.sh Tue Jun 19 17:16:11 TAIST 2012 5367,0,Tue Jun 19 17:16:13 TAIST 2012 5367,1,Tue Jun 19 17:16:13 TAIST 2012 5367,3,Tue Jun 19 17:16:15 TAIST 2012 5367,2,Tue Jun 19 17:16:15 TAIST 2012 5367,4,Tue Jun 19 17:16:17 TAIST 2012 5367,5,Tue Jun 19 17:16:17 TAIST 2012 5367,0,Tue Jun 19 17:16:18 TAIST 2012 5367,1,Tue Jun 19 17:16:18 TAIST 2012 5367,3,Tue Jun 19 17:16:20 TAIST 2012 5367,2,Tue Jun 19 17:16:20 TAIST 2012 5367,4,Tue Jun 19 17:16:22 TAIST 2012 5367,5,Tue Jun 19 17:16:22 TAIST 2012 11s
相关文章推荐
- linux下使用系统调用实现进程后台运行
- 用PHP实现守护进程任务后台运行与多线程(php-resque使用说明)
- 用PHP实现守护进程任务后台运行与多线程(php-resque使用说明)
- 用PHP实现守护进程任务后台运行与多线程(php-resque使用说明)
- Shell脚本实现检测进程是否正在运行
- shell脚本实现多进程运行的方法示例
- 用PHP实现守护进程任务后台运行与多线程(php-resque使用说明)
- Shell脚本实现监控swap空间使用情况和查看占用swap的进程
- linux下使用Shell显示运行脚本进程号的方法
- 用PHP实现守护进程任务后台运行与多线程(php-resque使用说明)
- 用PHP实现守护进程任务后台运行与多线程(php-resque使用说明)
- 用PHP实现守护进程任务后台运行与多线程(php-resque使用说明)
- shell脚本实现某一进程是否运行结束的监控
- Shell脚本实现检测进程是否正在运行
- 用PHP实现守护进程任务后台运行与多线程(php-resque使用说明)
- Shell脚本实现监控swap空间使用情况和查看占用swap的进程
- Shell脚本实现监视指定进程的运行状态
- Shell脚本实现监视指定进程的运行状态
- linux使用shell实现守护一个java进程。
- 用PHP实现守护进程任务后台运行与多线程(php-resque使用说明)