免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 35587 | 回复: 67
打印 上一主题 下一主题

[学习共享] shell并发脚本,很实用 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-10-29 21:09 |只看该作者 |倒序浏览
ptest.sh
  1. #!/usr/bin/ksh
  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. PARALLEL=3
  12. #定义临时管道文件名
  13. TMPFILE=$$.fifo
  14. #定义导出配置文件全路径名
  15. CMD_CFG=$HOME/cfg/ptest.cfg
  16. #定义失败标识文件
  17. FAILURE_FLAG=failure.log


  18. ####################### 函数定义 ########################
  19. # 中断时kill子进程
  20. function trap_exit
  21. {
  22. kill -9 0
  23. }


  24. # 通用执行函数
  25. exec_cmd()
  26. {
  27.     # 此处为实际需要执行的命令,本例中用sleep做示例
  28.         sleep ${1}
  29.     if [ $? -ne 0 ]
  30.     then
  31.         echo "命令执行失败"
  32.         return 1
  33.     fi
  34. }


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

  36. #清理失败标识文件
  37. rm -f  ${FAILURE_FLAG}

  38. #为并发进程创建相应个数的占位
  39. mkfifo $TMPFILE
  40. exec 4<>$TMPFILE
  41. rm -f $TMPFILE
  42. {
  43.         count=$PARALLEL
  44.         while [ $count -gt 0 ]
  45.         do
  46.                 echo
  47.                 let count=$count-1
  48.         done
  49. } >&4

  50. #从任务列表 seq 中按次序获取每一个任务
  51. while read SEC
  52. do
  53.         read <&4
  54.         (  exec_cmd ${SEC} || echo ${SEC}>>${FAILURE_FLAG} ; echo >&4 ) &
  55. done<$CMD_CFG
  56. wait
  57. exec 4>&-

  58. #并发进程结束后判断是否全部成功
  59. if [ -f ${FAILURE_FLAG} ]
  60. then
  61.         exit 1
  62. else
  63.         exit 0
  64. fi

复制代码


ptest.cfg
  1. 10
  2. 20
  3. 30
  4. 6
  5. 18
  6. 35
  7. 23
复制代码

论坛徽章:
0
2 [报告]
发表于 2008-10-29 21:13 |只看该作者
sf

论坛徽章:
0
3 [报告]
发表于 2008-10-30 10:45 |只看该作者
mark
学习

论坛徽章:
0
4 [报告]
发表于 2008-10-30 11:09 |只看该作者
顶,好东西。。。

论坛徽章:
0
5 [报告]
发表于 2008-10-30 12:03 |只看该作者
MARK...
UP...
STUDY...

论坛徽章:
1
白银圣斗士
日期:2015-11-23 08:33:04
6 [报告]
发表于 2008-10-30 12:21 |只看该作者
嗯。不错。。

论坛徽章:
0
7 [报告]
发表于 2008-10-30 12:25 |只看该作者
看到了kill -9 0

论坛徽章:
0
8 [报告]
发表于 2008-10-30 15:16 |只看该作者
ksh?

论坛徽章:
0
9 [报告]
发表于 2008-10-30 15:36 |只看该作者
trap 'trap_exit; exit 2' 1 2 3 15



LZ,这个1 2 3 15都代表什么?为什么是1 2 3 15而不是其他的数字呢?

论坛徽章:
0
10 [报告]
发表于 2008-11-05 18:53 |只看该作者
原帖由 ETKH 于 2008-10-30 15:36 发表
trap 'trap_exit; exit 2' 1 2 3 15



LZ,这个1 2 3 15都代表什么?为什么是1 2 3 15而不是其他的数字呢?

是信号的值,在linux下使用kill -l 可以列出。
/home/ray001 >kill -l
1) SIGHUP       2) SIGINT       3) SIGQUIT      4) SIGILL
5) SIGTRAP      6) SIGABRT      7) SIGEMT       SIGFPE
9) SIGKILL     10) SIGBUS      11) SIGSEGV     12) SIGSYS
13) SIGPIPE     14) SIGALRM     15) SIGTERM     16) SIGURG
17) SIGSTOP     1 SIGTSTP     19) SIGCONT     20) SIGCHLD
21) SIGTTIN     22) SIGTTOU     23) SIGIO       24) SIGXCPU
25) SIGXFSZ     26) SIGVTALRM   27) SIGPROF     2 SIGWINCH
29) SIGLOST     30) SIGUSR1     31) SIGUSR2     32) SIGRTMAX
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP