0

我有一个关于 bash 的问题。我一直在运行我自己的一些 C++ 程序和商业程序,并通过 Bash 脚本控制它们的交互(通过输入和输出文件)。我发现如果我在终端中单独运行我的 c++ 程序,它会在大约 10 到 15 秒内完成,但是当我通过 bash 脚本运行相同的程序时,每种情况下最多可能需要 5 分钟才能完成。

我发现使用系统监视器时,当我直接在终端中运行程序时,始终使用一个 CPU 的 100%,而当我在 bash(循环中)运行它时,最多记录 60% 的 CPU 使用率,并且似乎与完成时间越长(尽管 4 个处理器的平均 CPU 使用率更高)。

这非常令人沮丧,因为直到最近这还不是问题。

代码示例:

#!/usr/bin/bash
DIR="$1"
TRCKDIR=$DIR/TRCKRSLTS
STRUCTDIR=$DIR
SHRTTRCKDIR=$TRCKDIR/SHRT_TCK_FILES
VTAL=VTAL.png
VTAR=VTAR.png

NAL=$(find $STRUCTDIR | grep NAL)
NAR=$(find $STRUCTDIR | grep NAR)
AMYL=$(find $STRUCTDIR | grep AMYL)
AMYR=$(find $STRUCTDIR | grep AMYR)
TCKFLS=($(find $TRCKDIR -maxdepth 1 | grep .fls))

numTCKFLS=${#TCKFLS[@]}

for i in $(seq 0 $[numTCKFLS-1]); do

    filenme=${TCKFLS[i]}
    filenme=${filenme%.t*}
    filenme=${filenme##*/}      

    if [[ "$filenme" == *VTAL* ||  "$filenme" == *VTA_L* ]]; then

        STREAMLINE_CUTTER -MRT ${TCKFLS[i]} -ROI1 $VTAL -ROI2 $NAL  -op "$SHRTTRCKDIR"/"$filenme"_VTAL_NAL.fls
        STREAMLINE_CUTTER -MRT ${TCKFLS[i]} -ROI1 $VTAL -ROI2 $AMYL  -op "$SHRTTRCKDIR"/"$filenme"_VTAL_AMYL.fls

    fi

    if [[ "$filenme" == *VTAR* ||  "$filenme" == *VTA_R* ]];then

        STREAMLINE_CUTTER -MRT ${TCKFLS[i]} -ROI1 $VTAR -ROI2 $NAR  -op "$SHRTTRCKDIR"/"$filenme"_VTAR_NAR.fls
        STREAMLINE_CUTTER -MRT ${TCKFLS[i]} -ROI1 $VTAR -ROI2 $AMYR  -op "$SHRTTRCKDIR"/"$filenme"_VTAR_AMYR.fls

    fi

done
4

0 回答 0