linux线程编译指令,Linux Shell 多线程编程--原创

相关命令文件

1、runCommandInThreads.sh多线程实现主代码

cdir=$(dirname $BASH_SOURCE) ##Current directory of this script file.

source $cdir/logUtil.sh

function createFile() {

local dir=$1

local idx=$2

local fl="$dir/$idx"

touch $fl

}

function execShellCommand() {

local commd=$1

local subPID="$!"

$(debug "[$subPID] Execute command '$commd'")

eval "$commd"

}

### 设置并启动多线程 ###

## 参数:1、执行命令列表(对应一个数组)2、并发执行线程数

## 命令格式: source runCommandInThreads.sh && setupThreadsImmediately [执行命令列表] [并发执行线程数]

function setupThreadsImmediately() {

local startTimeSecs=$(date +"%s")

local parrelThreadsSize=${2:-2}

local tmp=$1[@]

local commands=(${!tmp})

local commandsSize=${#commands[*]}

local parrelThreadPidFileStoreDir="/tmp/parrel/"`date +%Y%m%d%H%M%S%s`

if [ $commandsSize -le 0 ]; then

echo "No commands input."

return

fi

if [ ! -d $parrelThreadPidFileStoreDir ]; then

trace "Create direcotry:"$parrelThreadPidFileStoreDir

mkdir -p $parrelThreadPidFileStoreDir

fi

$(info "parrelThreadsSize:${parrelThreadsSize} ,commandsSize:$commandsSize")

##

# for ((i=0;i

# $(createFile $parrelThreadPidFileStoreDir "$i")

# done

##

local mainPID="main"

local threadCount=0

for ((i=0; i

while [ -z "" ]

do

local chkFl="$(checkEnableEnroll $parrelThreadPidFileStoreDir $parrelThreadsSize $mainPID)"

if [ ! -z $chkFl ]; then #Start new thread.

threadCount=$(($threadCount+1))

touch $chkFl

$(trace "[$mainPID] Start new sub-thread")

{

##let threadCount=$threadCount+1

local tidx=$(($i+1))

local subPID="$tidx-$!"

local subStartTm=$(date +"%s")

##[ ! -f $chkFl ] && $(debug "[$subPID] file:$chkFl")

echo "$subPID" > $chkFl

##Do process in thread.

##local cmd=()

##eval cmd=\${$commands[@]}

##cmd="$cmd"

cmd="${commands[i]}"

cmd=${cmd//,/ }

cmd=$cmd" "$subPID

##$(execShellCommand "$cmd")

$(debug "[$subPID] Execute command '$cmd'")

eval "$cmd"

#------------Test-------------

# $(debug "[$subPID] Execute command '$cmd'")

# local ev=`expr $tidx % 2`

# if [ $ev -eq 0 ]; then

# sleep 4

# else

# sleep 2

# fi

[ -f $chkFl ] && rm $chkFl && $(trace "[$subPID] Deleted file $chkFl")

local subEndTm=$(date +"%s")

$(info "$threadCount/$commandsSize [$subPID] Sub-thread has complete, elapse: "$(calcElapse $subStartTm $subEndTm))

} & ## Work in background.

break;

fi

#chkFl="$(checkEnableEnroll $parrelThreadPidFileStoreDir $parrelThreadsSize $mainPID)"

done

done

##debug "Delete direcotry:"$parrelThreadPidFileStoreDir

wait # Wait for all sub threads.

local endTimeSecs=$(date +"%s")

##local elapseTime=$(($startTimeSecs-$endTimeSecs))

info "--- Finish all, elapse: "$(calcElapse $startTimeSecs $endTimeSecs)"-----"

rm -rf $parrelThreadPidFileStoreDir

}

function calcElapse() {

local st=$1

local et=$2

local elapseTime=$(($et-$st))

echo $((elapseTime/60))" mins "$((elapseTime%60))" seconds"

}

function checkEnableEnroll() {

local dir=$1

local len=$2

local pid=$3

local fl=""

local i=0;

for ((i=0;i

fl="$dir/$i"

if [ ! -f $fl ]; then

trace "[$pid] found "$fl

echo $fl

return

else

trace "Ignore $fl"

fi

done

echo ""

}

2、logUtil.sh  打印日志

# if [ ! -z $INCLUDING_LOG_UTIL ]; then

# return

# fi

export INCLUDING_LOG_UTIL="true"

export LOG_DEFAULT_LVL=-1

export LOG_TRACE_LVL=10

export LOG_DEBUG_LVL=20

export LOG_INFO_LVL=30

export LOG_WARN_LVL=40

export LOG_ERROR_LVL=50

function trace() {

local logLvl=${LOGLVL:-$LOG_DEFAULT_LVL}

if [ $logLvl -le $LOG_TRACE_LVL ]; then

local tm="`date +%T`"

echo "TRACE $tm $*">&2

fi

}

function debug() {

local logLvl=${LOGLVL:-$LOG_DEFAULT_LVL}

if [ $logLvl -le $LOG_DEBUG_LVL ]; then

local tm="`date +%T`"

echo "DEBUG $tm $*">&2

fi

}

function info() {

local logLvl=${LOGLVL:-$LOG_DEFAULT_LVL}

if [ $logLvl -le $LOG_INFO_LVL ]; then

local tm="`date +%T`"

echo "INFO $tm $*">&2

fi

}

function warn() {

local logLvl=${LOGLVL:-$LOG_DEFAULT_LVL}

if [ $logLvl -le $LOG_WARN_LVL ]; then

local tm="`date +%T`"

echo "WARN $tm $*">&2

fi

}

function error() {

local logLvl=${LOGLVL:-$LOG_DEFAULT_LVL}

if [ $logLvl -le $LOG_ERROR_LVL ]; then

local tm="`date +%T`"

echo "ERROR $tm $*">&2

fi

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值