Linux带有时间控制的多进程bash脚本

目标

以可控制的多进程执行,达到最大执行时长后停止脚本。

思路

1、产生fifo管道,并预填充n个值(与并发数相等)

2、记录脚本本身PID并启动计时器进程(计时终止后杀脚本本身PID)

3、并发执行

4、正常执行后,杀掉计时器子进程

5、回收fd

控制参数

PROC: 进程数

MAX_EXEC_TIME: 最大执行时长

 

不带时间控制版本
#!/bin/bash

trap "exec 10>&-;exec 10<&-;exit 0" 2
mkfifo testfifo
exec 10<>testfifo
rm -f testfifo

for x in {1..10};do
  echo >&10
done

for x in {001..060};do
  read -u10
{
  ### do something
  echo "success:$x"
  sleep 2
  echo >&10
}&
done

wait 

exec 10>&-
exec 10<&-

 

带时间控制版本
#!/bin/bash
## create fd
[[ -e ./fd1 ]] || mkfifo ./fd1
exec 6<> ./fd1
rm -rf ./fd1

PROC=4

for i in `seq 1 ${PROC}`;
do
    echo >&6
done

## Define max execuate time here
MAX_EXEC_TIME=50

## echo $$ > PPID
ppid=$(echo $$)

## time tic-toc
{
    sleep ${MAX_EXEC_TIME} && exec 6<&- && exec 6>&- && echo "ABORT" && kill $ppid
}&
## echo $! > PID
pid=`echo $!`
################
## task list
for line in `seq 1 10`;
do
    read -u6
    {
        ## do something here
        echo "start_task_${line}: $!"
        sleep 3
        echo >&6
    }&
done
sleep 1
kill $pid
wait

## close fd read & write
exec 6<&-
exec 6>&-

echo "NORMAL EXIT" && exit 0

 

转载于:https://www.cnblogs.com/imzye/p/7257318.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值