【发布时间】:2019-07-11 08:05:32
【问题描述】:
我一直在尝试在一个巨大的循环中创建 cURL,并使用 bash 将 cURL 运行到后台进程中,大约有 904 个域将被 cURL
问题在于,由于 Linux 内核的 PID 限制,不能全部嵌入 904 个域。我曾尝试将 pid_max 添加到 4194303(我在此讨论中读到 Maximum PID in Linux),但在我检查只有域 901 已在后台进程中运行之后,在我添加 pid_max 之前仅在 704 左右在后台进程中运行。
这是我的循环代码:
count=0
while IFS= read -r line || [[ -n "$line" ]];
do
(curl -s -L -w "\\n\\nNo:$count\\nHEADER CODE:%{http_code}\\nWebsite : $line\\nExecuted at :$(date)\\n==================================================\\n\\n" -H "X-Gitlab-Event: Push Hook" -H 'X-Gitlab-Token: '$SECRET_KEY --insecure $line >> output.log) &
(( count++ ))
done < $FILE_NAME
有人有其他解决方案或修复它来处理巨大的循环以将 cURL 运行到后台进程吗?
【问题讨论】:
-
xargs
-P选项可能有助于限制一次进程的数量 -
你能解释一下吗?
-
我在发布代码之前添加了注释,由于count变量似乎并不容易,否则可能是
xargs -n1 -P50 bash -c '....' - < "$FILE_NAME",其中50是一次运行的进程数,....要执行的命令,"$1"要使用的参数,'-代表"$0" -
` --process-slot-var=count` 可用于从this answer传递索引