Chinaunix首页 | 论坛 | 博客
  • 博客访问: 246199
  • 博文数量: 41
  • 博客积分: 1523
  • 博客等级: 上尉
  • 技术积分: 579
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-05 21:23
文章分类

全部博文(41)

文章存档

2014年(1)

2013年(2)

2012年(1)

2011年(2)

2010年(3)

2009年(1)

2008年(20)

2007年(11)

分类: LINUX

2008-11-24 10:55:02

今天看到一个shell脚本玩多进程的例子,觉得很有趣扩展一下代码。

#!/bin/bash
Number="1000";
Thread="10";
Timeout="1";
PATH="${PATH}:/sbin:/usr/sbin";
function RunCmd()
{
        echo "User Cmd"
}
function LockFile()
{
        find /dev/shm/* -maxdepth 0 -type l -follow -exec unlink {} \;
        [ -f /dev/shm/${0##*/
} ] && { echo "$0 is run !";exit 1; }
        ln -s /proc/$$ /dev/shm/${0##*/}
        trap "Exit" 0 1 2 3 15 22 24
}
function Exit()
{
        unlink /dev/shm/${0##*/};
        ps -eo "%p %P %c"|awk '{if($2==1 && $3~/'${0##*/}'/)system("kill -9 "$1)}'
        exec 4<&-;
        rm -f ${PID}
        exit 0;
}

# main ()
LockFile
PID="$$";
cd /dev/shm/;exec 2>/dev/null
typeset i;
( while true;do
        sleep $((${Timeout}+3));
        ps -eo "%p %P %t"|awk '{if($2=='${PID}')
        {
        split($3,ST,"[^0-9]");
        L=length(ST);
        S=0;
        if(L==4){ S=ST[1]*86400;ST[1]=0 }
        for(a=L;a>0;a--) S=S+(ST[a]*(60**(L-a)));
        if(S>'
${Timeout}') { system("kill -9 "$1" && echo N >'${PID}'")}
        }}'

  done & >/dev/null 2>&1 )
mknod ${PID} p ;exec 4<>${PID}
for((i=0;i<Thread;i++));do echo "OK" >&4;done
for((i=0;i<Number;i++));do
        read;
        ( RunCmd; echo "OK" >&4 ) &
done <&4
wait

阅读(1455) | 评论(0) | 转发(0) |
0

上一篇:curl

下一篇:init 命令

给主人留下些什么吧!~~