V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
sobigfish
V2EX  ›  问与答

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

  •  
  •   sobigfish · 2012-02-25 13:29:26 +08:00 · 4141 次点击
    这是一个创建于 4686 天前的主题,其中的信息可能已经有所发展或是发生改变。
    请文unix(mac)的bash 可以执行多线程么?怎么写 感谢


    发现个扫米的bash在想着改为多线程的。
    6 条回复    1970-01-01 08:00:00 +08:00
    sobigfish
        1
    sobigfish  
    OP
       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
        2
    ufo22940268  
       2012-02-27 17:08:07 +08:00
    自问自答碉堡了
    sobigfish
        3
    sobigfish  
    OP
       2012-02-27 17:10:59 +08:00
    @ufo22940268 呵呵,还是隔了几天呢。。。


    呃,上面的循环把a去了 是因为我刚才把a扫完了
    ctrl c的,发这就忘了改回来了
    ant_sz
        4
    ant_sz  
       2012-02-27 19:05:39 +08:00
    多进程还是多线程啊?
    多进程的话,在终端命令结束 使用 & 符号切入后台并重定向输出么(不过有些命令的确不允许后台)
    另外可以使用jobs命令查看在后台运行的进程,类似相关的还有bg命令和nohup
    sobigfish
        5
    sobigfish  
    OP
       2012-02-27 19:12:40 +08:00
    @ant_sz 谢谢回答,这个bash里不考虑了,并发多或长时间连续whois很快就会被whois服务器ban
    ri0day
        6
    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
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1090 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 19:13 · PVG 03:13 · LAX 11:13 · JFK 14:13
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.