Shell脚本多进程编程

说明:很多时候通过Shell脚本去处理任务的时候,如果仅仅是单进程运行的话可能效率会比较低,所以本章将介绍Shell脚本多进程编程,进程的启停以及进程ID管理

代码版块

<code>#!/bin/bash
basedir=$(cd `dirname "$0"`;pwd)
logdir=$basedir/logs
piddir=$basedir/pid
logfile=$logdir/log.log_$(date +%F)
pidfile=$piddir/mprocess.pid
number=30

#创建目录
mkdir -p $logdir $piddir

#生成日志
do_writelog() {
case $1 in
i|I)
shift
echo "$(date +%Y-%m-%d) $(date +%H:%M:%S)|INFO|$@" >>$logfile
;;
e|E)
shift
echo "$(date +%Y-%m-%d) $(date +%H:%M:%S)|ERROR|$@" >>$logfile
;;
w|W)
shift
echo "$(date +%Y-%m-%d) $(date +%H:%M:%S)|WARNING|$@" >>$logfile
;;
*)
echo "$(date +%Y-%m-%d) $(date +%H:%M:%S)|DEBUG|$@" >>$logfile
esac
}

case $1 in
start)
expr $2 + 0 &>/dev/null
if [ $? -ne 0 ];then
number=1
else
if [ $2 -le $number ];then
number=$2
fi
fi
seq $number|while read i;do
(
while true;do
do_writelog i "Thread-$i|多进程测试"
sleep 0.5

done
)&
echo "$!" >>$pidfile
done
;;
stop)
expr $2 + 0 &>/dev/null
if [ $? -ne 0 ];then
number=1
else
if [ $2 -le $number ];then
number=$2
fi
fi
if test -e "$pidfile";then
head -n $number $pidfile|xargs kill -9 &>/dev/null
if [ $number -lt $(cat $pidfile|wc -l) ];then
sed -i "1,${number}d" $pidfile
else
rm -f $pidfile &>/dev/null
fi
else
echo "进程PID文件($pidfile)不存在,服务未启动"
fi
;;
*)
echo "USAGE: sh $0 start|stop"
esac
/<code>

使用方法

1、启动多进程:

sh mprocess.sh start 进程数

Shell脚本多进程编程

启动5个进程

Shell脚本多进程编程

Shell脚本多进程编程


再次启动3个进程,可以看到进程数已经变成8个了


Shell脚本多进程编程

2、停止多进程:

sh mprocess.sh stop 进程数

Shell脚本多进程编程

可以看到进程数已经减少

继续停止进程,直至停止所有进程

Shell脚本多进程编程

至此多进程测试已经完成,该测试比较简单可以按照此方法套路出其它功能脚本


分享到:


相關文章: