linux – 等待子shell进程完成
发布时间:2020-12-13 23:52:21 所属栏目:Linux 来源:网络整理
导读:processUsageFile(){ #sdate=`pin_virtual_time | awk -F" " '{print $3}'`; #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_
processUsageFile() { #sdate=`pin_virtual_time | awk -F" " '{print $3}'`; #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 processing PreProcessing # Start processing usage files. processUsageFile processErrFile 上述代码的思想是做并行处理.所有方法都调用多个子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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |