请文unix(mac)的bash 可以执行多线程么?怎么写 感谢

2012-02-25 13:29:26 +08:00
 sobigfish
请文unix(mac)的bash 可以执行多线程么?怎么写 感谢


发现个扫米的bash在想着改为多线程的。
4123 次点击
所在节点    问与答
6 条回复
sobigfish
2012-02-27 17:06:11 +08:00
自问自答好了,别说多线程,单线程长时间都会被ban
还有新问题 下面这个根据http://shenmeng.org/article/20110509-34.html 改的
就加了1个echo 1个sleep 1 elif。

date格式不对。。貌似和mac bash显示的是中文日期格式有关,怎么改呢?


<pre>
#!/bin/bash
function availability_check(){
whois_info=`whois "$1"`
if (echo "$whois_info"| grep "NOT FOUND" > /dev/null) then
echo "available"
echo $1 >>me.txt
return 1
elif(echo "$whois_info"| grep "Domain Create Date" > /dev/null) then
creation1=`echo "$whois_info" |grep "Domain Create Date"|awk -F":" '{print $2;exit}'`
creation=`date "+%d-%b-%Y" -d "$creation1"`
expiration1=`echo "$whois_info" |grep "Domain Expiration Date"|awk -F":" '{print $2;exit}'`
expiration=`date "+%d-%b-%Y" -d "$expiration1"`
echo "$creation $expiration"
#怎么比较日期呢 echo $1" expiring" >>me.txt
return 2
elif(echo "$whois_info"| grep "reserved" > /dev/null) then
echo "reserved"
return 3
elif(echo "$whois_info"| grep "auditing" > /dev/null) then
echo "auditing"
return 4
elif(echo "$whois_info"| grep "Premium Name" > /dev/null) then
echo "Premium Name"
return 5
else
availability_check "$1"
fi
}

for a1 in `seq 98 122 | awk '{printf "%c\n",$1}'`
do
for a2 in `seq 97 122 | awk '{printf "%c\n",$1}'`
do
for a3 in `seq 97 122 | awk '{printf "%c\n",$1}'`
do
dn="$a1$a2$a3.me"
echo -n "$dn"
res=`availability_check "$dn"`
echo " $res"
done
sleep 30
done
done
</pre>
ufo22940268
2012-02-27 17:08:07 +08:00
自问自答碉堡了
sobigfish
2012-02-27 17:10:59 +08:00
@ufo22940268 呵呵,还是隔了几天呢。。。


呃,上面的循环把a去了 是因为我刚才把a扫完了
ctrl c的,发这就忘了改回来了
ant_sz
2012-02-27 19:05:39 +08:00
多进程还是多线程啊?
多进程的话,在终端命令结束 使用 & 符号切入后台并重定向输出么(不过有些命令的确不允许后台)
另外可以使用jobs命令查看在后台运行的进程,类似相关的还有bg命令和nohup
sobigfish
2012-02-27 19:12:40 +08:00
@ant_sz 谢谢回答,这个bash里不考虑了,并发多或长时间连续whois很快就会被whois服务器ban
ri0day
2012-02-27 19:22:09 +08:00
用进程模拟一个。

cat p.sh
#!/bin/bash
mkfifo /tmp/p.io
exec 9<>/tmp/p.io
rm /tmp/p.io
#create 10 thread
{
for ((i=1;i<=10;i++))
do
echo
done
}>&9

d() { ##your logic code in this function for .example ,do some sleep
sleep $1
}
x=(1 2 3 4 5 5 6 7 8 9)

for d in ${x[*]}
do
read
(d $d;echo >&9) &
done <&9
wait
exec 9>&-
exit 0

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/28128

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX