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腳本多進程編程

至此多進程測試已經完成,該測試比較簡單可以按照此方法套路出其它功能腳本


分享到:


相關文章: