如何计算达到特定状态的子进程

如何计算达到特定状态的子进程

我有一个 bash 脚本,它启动 >20 个子进程(&在后台启动的函数),并希望包含一个进度指示器,告诉用户有多少子进程已经在运行。

问题是这些子进程需要相当长的时间来启动(大约 20 秒,具体取决于网络)。有没有一种方法可以计算已成功启动的子进程的数量?

我可以将任何代码放入 bash 函数中,该函数将在子进程准备就绪时运行。但是我不知道增加全局变量的好方法,该变量保存着准备好的作业数量。

答案1

您可以使用外部文件作为全局变量。这是一个例子。

file="$(mktemp)"
f() { sleep 3; echo x; sleep 3; }
for i in {1..10} ; do
    >>"$file" f &
done

switch=true
while $switch; do
    sleep 1
    cnt=$(wc -l "$file")
    cnt="${cnt%%${file}}"    #this is needed to remove the file name
                             #from the output of wc -l
    echo "$cnt"
    [ "$cnt" -ge 5 ] && switch=false
done
rm "$file"

将其保存到example并采购给出:

$ . example
0
0
10

一旦您有权访问

cnt=$(wc -l "$file")
cnt="${cnt%%${file}}"

将此代码修改为进度条很容易。

不要忘记[ "$cnt" -ge 5 ] && switch=false根据您的情况调整永恒循环断路器。

相关内容