shell脚本中创建多线程的有关问题
shell脚本中创建多线程的问题
如题,一个很简单的需求,
希望在shell中以类似“多线程”的形式处理数据。
大致需求为:
有一个很大的文件,
希望有多个线程分别读取其中的一段,并将结果存入一个单独的文件中。
大致的代码如下:
如果在for循环结束的"}"后面添加"&"(为了创建后台线程),
则for循环中的curEnd和curNum就一直不变;
而不添加"&",则curEnd正常递增。
请问,该如何是其中的curEnd和curNum在多线程模式下正常改变啊?
------解决方案--------------------
子进程是父进程的副本, 子进程变, 父进程看不到.
------解决方案--------------------
将变量export 声明下
如题,一个很简单的需求,
希望在shell中以类似“多线程”的形式处理数据。
大致需求为:
有一个很大的文件,
希望有多个线程分别读取其中的一段,并将结果存入一个单独的文件中。
大致的代码如下:
#10个线程
numWorders=10
#原始文件的行数
numAllPtn=`wc -l $rawPtnPath | awk '{print $1}'`
echo "numAllPtn:"$numAllPtn
#每个线程处理的行数
numPtnPerWorker=$[$numAllPtn/$numWorders+1]
echo "numPtnPerWorker:"$numPtnPerWorker
curBeg=0
curEnd=0
curNum=$numPtnPerWorker
#循环创建这些线程
for((i=1;i<=$numWorders;++i)); do
{
#当前线程处理的原文件的最后一行
curEnd=$[$curBeg+$numPtnPerWorker]
if [ $curEnd -gt $numAllPtn ]
then
curEnd=$numAllPtn
fi
#当前线程处理的原文件的行数
curNum=$[$curEnd-$curBeg]
echo "curEnd:"$curEnd" - curNum:"$curNum
curBeg=$curEnd
#当前线程处理后,写入的结果文件
curResPtnFile=$resPtnDir"/part_"$i
# call function,把当前线程要处理的原文件、结果文件、最后一行、行数作为参数传入
# WorkerFunc $rawPtnPath $curResPtnFile $curEnd $curNum
}
#}& # 问题就在这里!!
done
如果在for循环结束的"}"后面添加"&"(为了创建后台线程),
则for循环中的curEnd和curNum就一直不变;
而不添加"&",则curEnd正常递增。
请问,该如何是其中的curEnd和curNum在多线程模式下正常改变啊?
------解决方案--------------------
子进程是父进程的副本, 子进程变, 父进程看不到.
------解决方案--------------------
将变量export 声明下