【发布时间】:2014-07-11 03:08:46
【问题描述】:
更新: 初始问题: 有一个 while read 循环打印读取的每一行 答案:把 done
temp_ip=$($mysql --skip-column-names -h $db_address -u $db_user -p$db_passwd $db_name -e "select ip_routeur,code_site from $db_vtiger_table where $db_vtiger_table.ip_routeur NOT IN (select ip from $db_erreur_table);")
得到的结果如下所示:
<ip1> <site1>
<ip2> <site2>
<ip3> <site3>
<ip4> <site4>
最多 5000 个 ip_address
我做了一个“while循环”:
while [ `find $proc_dir -name snmpproc* | wc -l` -ge "$max_proc_snmpget" ];do
{
echo "sleeping, fping in progress";
sleep 1;
}
done
temp_ip=$($mysql --skip-column-names -h $db_address -u $db_user -p$db_passwd $db_name -e "select ip_routeur,code_site from $db_vtiger_table where $db_vtiger_table.ip_routeur NOT IN (select ip from $db_erreur_table);")
while read ip codesite;do
{
sendSNMPGET $ip $snmp_community $code_site &
}
done<<<"$temp_ip"
sendSNMPGET 函数是:
sendSNMPGET() {
touch $procdir/snmpproc.$$
hostname=`snmpget -v1 -c $2 $1 sysName.0`
if [ "$hostname" != "" ]
then
echo "hi test"
fi
rm -f $procdir/snmpproc.$$
$max_proc_snmpget 设置为 30 执行时,读取正常,屏幕上不再打印,但子进程似乎迷失方向
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
./scan-snmp.sh: fork: Resource temporarily unavailable
./scan-snmp.sh: fork: Resource temporarily unavailable
./scan-snmp.sh: fork: Resource temporarily unavailable
./scan-snmp.sh: fork: Resource temporarily unavailable
为什么它不能处理这个?
【问题讨论】:
-
它这样做是因为您创建了太多进程。尝试查看 $$ 的值,看看它是否正在改变......
标签: sql bash loops for-loop while-loop