Chinaunix首页 | 论坛 | 博客
  • 博客访问: 853373
  • 博文数量: 581
  • 博客积分: 7803
  • 博客等级: 少将
  • 技术积分: 3653
  • 用 户 组: 普通用户
  • 注册时间: 2007-04-27 08:21
文章分类

全部博文(581)

文章存档

2013年(7)

2012年(414)

2011年(159)

2009年(1)

分类:

2012-04-22 13:11:14

原文地址:shell并发控制脚本 作者:g_programming

shell并发控制脚本

 

整理自:

 

该脚本通过建立FIFO(命名管道),建立起进程之间的通讯,并且通过FIFO实现命令的队列化(先进先出),主进程不断地让要执行的命令在后台执行,并且通过控制并发数量,实现在后台运行的命令的个数。

(1)         FIFO使命令队列化,并且控制并发数量;

(2)         后台执行命令,父进程使用wait等待全部子进程结束;

(3)         获取失败信息,日志;

(4)         捕获信号,进行信号处理;

ptest.sh

1.      #!/usr/bin/bash

2.      # SCRIPT: ptest.sh

3.      # AUTHOR: Ray001

4.      # DATE: 2008/10/03

5.      # REV: 2.0

6.      # For STUDY

7.      #

8.      # PURPOSE:

9.      # 实现进程并发,提高执行效率,同时能记录每个执行失败的子进程信息

10.    

11.    

12.   #定义并发进程数量

13.   PARALLEL=3

14.   #定义临时管道文件名

15.   TMPFILE=$$.fifo

16.  #定义导出配置文件全路径名 该脚本存放的是sleep的时间

17.   CMD_CFG=$HOME/cfg/ptest.cfg

18.   #定义失败标识文件

19.   FAILURE_FLAG=failure.log

20.    

21.    

22.   ####################### 函数定义 ########################

23.   # 中断时kill子进程

24.   function trap_exit

25.   {

26.   kill -9 0

27.   }

28.    

29.    

30.   # 通用执行函数

31.   exec_cmd()

32.   {

33.      # 此处为实际需要执行的命令,本例中用sleep做示例

34.          sleep ${1}

35.       if [ $? -ne 0 ]

36.       then

37.           echo "命令执行失败"

38.           return 1

39.       fi

40.   }

41.    

42.    

43.   trap 'trap_exit; exit 2' 1 2 3 15

44.    

45.   #清理失败标识文件

46.   rm -f  ${FAILURE_FLAG}

47.    

48.   #为并发进程创建相应个数的占位

49.  mkfifo $TMPFILE #创建FIFO

50.   exec 4<>$TMPFILE

51.   rm -f $TMPFILE #为啥要删除??

52.  { #FIFO写入$PARALLEL个数的换行

53.           count=$PARALLEL

54.           while [ $count -gt 0 ]

55.           do

56.                   echo

57.                   let count=$count-1

58.           done

59.   } >&4

60.    

61.   #从任务列表 seq 中按次序获取每一个任务

62.   while read SEC

63.   do

64.           read <&4

65.           (  exec_cmd ${SEC} || echo ${SEC}>>${FAILURE_FLAG} ; echo >&4 ) &

66.   done<$CMD_CFG

67.   wait

68.   exec 4>&-

69.    

70.   #并发进程结束后判断是否全部成功

71.   if [ -f ${FAILURE_FLAG} ]

72.   then

73.           exit 1

74.   else

75.           exit 0

76.   fi


ptest.cfg

1.      10

2.      20

3.      30

4.      6

5.      18

6.      35

7.      23

 

阅读(350) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~