小编Man*_*hat的帖子

在 bash 后台运行时的内部 for 循环会产生新的 bash 进程

我正在执行下面的脚本

LOGDIR=~/curl_result_$(date |tr ' :' '_')

mkdir $LOGDIR

for THREADNO in $(seq 20)
do
for REQNO in $(seq 20)
do
 time curl --verbose -sS  http://dummy.restapiexample.com/api/v1/create --trace-ascii ${LOGDIR}/trace_${THREADNO}_${REQNO} -d @- <<EOF >> ${LOGDIR}/response_${THREADNO} 2>&1
 {"name":"emp_${THREADNO}_${REQNO}_$(date |tr ' :' '_')","salary":"$(echo $RANDOM%100000|bc)","age":"$(echo $RANDOM%100000|bc)"}
EOF
echo -e "\n-------------------------------" >> ${LOGDIR}/response_${THREADNO}
done 2>&1 | grep real > $LOGDIR/timing_${THREADNO} &
done
Run Code Online (Sandbox Code Playgroud)

一段时间后,如果我检查没有 bash 进程,它会显示 20(不是 1 或 21)

ps|grep bash|wc -l
Run Code Online (Sandbox Code Playgroud)

问题是由于我没有使用方括号“()”来包围内循环,所以不应该产生新的 shell 进程。我想避免在 CPU 使用率接近 100% 时创建新的 shell。我不知道这是否重要,但我正在使用 Cygwin。

bash pipe background-process for

4
推荐指数
1
解决办法
208
查看次数

标签 统计

background-process ×1

bash ×1

for ×1

pipe ×1