gpt4 book ai didi

multithreading - bash while 循环线程

转载 作者:行者123 更新时间:2023-11-29 08:54:03 24 4
gpt4 key购买 nike

我有一个 while 循环从 $hosts

读取行
while read line
do
ip=$line
check
done < $hosts

我的问题是我是否可以使用某种方式来加快速度或一次在 10 台主机上运行检查并且每次检查都在不同的 IP 上并在 $host 中的所有 IP 都已完成时完成检查?谢谢

最佳答案

可以通过&将任务发送到后台如果您打算等待所有这些完成,您可以使用 wait 命令:

process_to_background &
echo Processing ...
wait
echo Done

如果您想等待一个(或几个)特定任务,您可以在后台获取给定任务的pid

important_process_to_background &
important_pid=$!
while i in {1..10}; do
less_important_process_to_background $i &
done

wait $important_pid
echo Important task finished

wait
echo All tasks finished

但请注意:后台进程可能会弄乱输出,因为它们将异步运行。您可能希望使用命名管道来收集它们的输出。

编辑

正如评论中所问,可能需要限制 fork 的后台进程。在这种情况下,您可以跟踪已启动的后台进程数并通过命名管道与它们通信。

mkfifo tmp # creating named pipe

counter=0
while read ip
do
if [ $counter -lt 10 ]; then # we are under the limit
{ check $ip; echo 'done' > tmp; } &
let $[counter++];
else
read x < tmp # waiting for a process to finish
{ check $ip; echo 'done' > tmp; } &
fi
done
cat /tmp > /dev/null # let all the background processes end

rm tmp # remove fifo

关于multithreading - bash while 循环线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23048702/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com