processUsagefile(){ #sdate=`pin_virtual_time | awk -F" " '{print }'`; #Get all new files to be loaded to brm staging data. count=`ls ${PRE_STAGING}/TWN* 2>/dev/null|grep -v reprocess|wc -l` if [ $count -ne 0 ];then # Fork subshell (./efx_omc_brm_rpt_process.sh -t TWN & )& exitOnError fi #Process RAPId Report files count=`ls $PRE_STAGING/RR* 2>/dev/null|grep -v reprocess|wc -l` if [ $count -ne 0 ];then (./efx_omc_brm_rpt_process.sh -t RR &)& exitOnError fi......}#Reprocessing. Process the reprocessed files.#This method updates the records in the BRM staging table.reprocessingUsagefile(){ #Process TWN fulfillment reprocess files count=`ls $PRE_STAGING/TWN*reprocess* 2>/dev/null|wc -l` if [ $count -ne 0 ];then # Fork subshell (./efx_omc_brm_rpt_reprocess.sh -t TWN & ) & fi #Process RAPId Report files count=`ls $PRE_STAGING/RR*reprocess* 2>/dev/null|wc -l` if [ $count -ne 0 ];then (./efx_omc_brm_rpt_reprocess.sh -t RR &) & fi......}#Pre processingPreProcessing# Start processing usage files.processUsagefileprocessErrfile
上述代码的思想是做并行处理.所有方法都调用多个子shell并从tty中分离.我想知道是否有办法等待前两个方法先完成执行然后再运行最后一个方法.
等待PID在某种程度上是不准确的.仍然在尝试…
waitPIDs() {echo "Testing $pIDs -- ${#pIDs[@]}" while [ ${#pIDs[@]} -ne 0 ]; do local range=$(eval echo {0..$((${#pIDs[@]}-1))}) local i for i in $range; do if ! kill -0 ${pIDs[$i]} 2> /dev/null; then echo "Done -- ${pIDs[$i]}" unset pIDs[$i] fi done pIDs=("${pIDs[@]}") sleep 1 done }解决方法 似乎主要的问题是,你正在使用分离的子壳.
也许最简单的解决方案是使用不同的机制来分离子shell,这样你就可以使用wait.
例如通过nohup
nohup ./process1 & nohup ./process2 & wait总结
以上是内存溢出为你收集整理的linux – 等待子shell进程完成全部内容,希望文章能够帮你解决linux – 等待子shell进程完成所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)