バッシュについて質問です。私は商用プログラムと組み合わせていくつかの独自の 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