我需要从文件中读取数百个ID,并将这些ID作为参数传递给另一个shell脚本,以作为单独的子请求生成。 [完成]
但我们不能产生超过6个子请求,即在给定时间点可以运行不超过6个请求。
我已经浏览了这个网站(下面给出的参考资料)和其他人,并且知道你可以使用$获得生成过程的PID!但实现它的时间还很遥远,因为我不知道如何将它们存储在数组中并在生成的进程完成后将其删除。
Forking / Multi-Threaded Processes | Bash
#!/bin/bash
file="/usr/share/nginx/html/cron/userids.txt" //file containing the userids that needs to be spawned
MAXCOUNT=6 //maximum number of child request that can be spawned
while IFS= read -r line
do
#submit a background job here
sh fetch.sh $line & //this is the shell script that needs to be submitted
//check if the spawned request count is less than MAXCOUNT
//If it is then wait for one or more request to finish
//If the number of child requests is less than MAXCOUNT then spawn another request
//if all the lines are read then wait till all the child process completes and then exit
done <"$file"
请注意我是新手并且对shell过程了解不多。
将欣赏任何指示和反馈。
由于
答案 0 :(得分:1)
您可以使用xargs
生成传递从stdin读取的参数的最大进程数
xargs -n 1 -P 6 fetch.sh < "$file"
答案 1 :(得分:1)
您可以使用 GNU Parallel :
parallel -j6 -a "$file" fetch.sh
它有很多处理故障,进度条,日志等的选项。