Error in finding the PID by grep and assigning to a variable

Hello All,
I am facing difficulty in getting the PID value & then assigning it to a variable,
kindly help me in resolving the issue.
Thanks a lot in advance.

The custom utility used inside the Test2.sh will process the file in a batch of 10 lines at once and for efficient memory management, once first batch is completed, it will start a new process of the custom_utility to process the next batch and this goes on till all batches are processed.
command executing at shell: ./Test2.sh -f=./input.txt

The Test2.sh should not exit till all the batch process of this file are completed by the custom utility.
For this reason, i used the while loop in which i am grepping for the PID having the name custom_utility & the input file and assigning it to a variable. if variable is blank, come out of loop is the logic.

Though the Sub process is running, the SUB_PID is returning blank and it is coming out of loop

Test.sh only contains the while loop logic and it is working fine.

Please help me in this regard.

-Chandra
***************************************************
Test2.sh

#! /bin/sh
if [ $# -eq 0 ]; then
    echo ""
    echo "No Parameter provided"
    usage
    exit 1
fi

# Parse command line options
for PARAM; do
    if [[ "$PARAM" = -f=* ]]; then
           FILE=$(echo $PARAM | cut -d"=" -f2)
           echo $FILE
    fi

done
    if [[   ( "$FILE" == "" )  ]]; then
            echo ""
            echo "File argument is not specified, exiting the script..."
            exit 1
    fi

    if [ ! -r ${FILE} ];then
            echo "Read access permission denied on $FILE File or File doesn't exists, exiting the script..."
            exit 1
    fi

COMMAND="custom_utility  -u=user1 -p=123 -filename=$FILE -batch_size=10"
echo "Command of Custom Utility is :"
echo ""
echo "custom_utility  -u=user1 -p=***** -f=send -filename=$FILE -batch_size=10"

$COMMAND &
CU_RC=$?
echo "lets wait till all custom_utility  process for this Input File are completed"
echo "PID : $!"
wait $PID
while true
do
        SUB_PID=`ps -ef | grep custom_utility  | grep $FILE | grep -v 'grep' | awk '{print $2}'`
        if [[  "$SUB_PID" == "" ]]; then
        break
        fi
        sleep 2
done

if [ $CU_RC -ne 0 ]; then
        echo "Error: Custom Utility for $FILE resulted in error"
        echo ""
        exit 992
fi
echo "***************************************************"
echo ""

# EOF
exit 0

***************************************************
Test.sh

#! /bin/sh

while true
do
        SUB_PID=`ps -ef | grep custom_utility | grep "./input.txt" | grep -v 'grep' | awk '{print $2}'`
        echo "SUB_PID : ~$SUB_PID~"
        if [[  "$SUB_PID" == "" ]]; then
        echo `date`
        break
        fi
        sleep 2
done
echo "PID : $!"

That "$!" is the SUB_PID.

Thank you jim mcnamara for reply.
$! is returning the parent PID only, which is not full filling my requirement.

Once the parent PID is completed, SUB PROCESS will start and it will have a new PID.

I should grep the sub process PID in while loop & till the completion of sub processes i need to wait and then i should break from the loop

I am able to resolve my issue.
when i am using the ps -ef, it is not giving the complete command line arguments. That is the reason for the issue. ps auxw will return the complete command line arguments.

Command Having Issue:

SUB_PID=`ps -ef | grep custom_utility | grep "./input.txt" | grep -v 'grep' | awk '{print $2}'`

Working One:

SUB_PID=`ps auxw | grep custom_utility | grep "./input.txt" | grep -v 'grep' | awk '{print $2}'`