0

バッシュについて質問です。私は商用プログラムと組み合わせていくつかの独自の C++ プログラムを実行し、Bash スクリプトを使用して (入力ファイルと出力ファイルを介して) それらの相互作用を制御しています。ターミナルで C++ プログラムを単独で実行すると、約 10 ~ 15 秒で完了しますが、bash スクリプトを使用して同じプログラムを実行すると、いずれの場合も完了までに最大 5 分かかることがあります。

システム モニターを使用すると、プログラムをターミナルで直接実行すると、一貫して 1 つの CPU が 100% 使用されるのに対し、bash で (ループで) 実行すると、最大 60% の CPU 使用率が記録され、リンクされているように見えます。完了時間が長くなります (ただし、平均 CPU 使用率は 4 プロセッサよりも高くなります)。

最近までこれは問題ではなかったので、これは非常にイライラします。

コードの例:

#!/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