【问题标题】:Multi threading in command line possible?命令行中的多线程可能吗?
【发布时间】:2013-03-11 15:18:03
【问题描述】:

我正在使用以下命令从文本文件中的域列表中检查 whois 信息,然后将包含电子邮件的任何行输出到新文件:

for i in $(cat testdomains.txt); do whois $i| egrep [a-zA-Z0-9]@[a-zA-Z0-9]\.[a-zA-Z0-9]; done >> results.txt

有没有办法通过一次检查多个域来加快这一速度?例如,现在它正在从一个域到下一个域检查信息。我可以在命令中更改什么以使其一次检查 50 个域吗?

【问题讨论】:

    标签: shell command-line ssh command


    【解决方案1】:

    使用&,您可以在后台运行任何命令(因此并行):

    for i in $(< testdomains.txt); do
        whois "$i" | egrep '[a-zA-Z0-9]@[a-zA-Z0-9]\.[a-zA-Z0-9]' &
    done >> results.txt
    

    注意

    • 如果您将控制运算符 &amp; 放在命令的末尾,例如command args &amp;,shell 在 subshel​​l 的后台执行命令。 shell 不等待命令完成,返回状态为 0。最后一个后台命令的 Pid 可通过特殊变量$! 获得
    • 每个&amp; 在后台执行fork(2)
    • How do I wait for several spawned processes?

    【讨论】:

    • 这样会同时检查所有域?
    • @syf101 :是的,就是这样 =)
    • 嗯,这实际上非常有用,但我认为我的服务器无法处理。这将导致它同时检查数以万计的域并崩溃:/但是如果可以一次检查 50 个左右,然后可能会在检查后将其删除并继续。任何你认为最快的
    • 查看我关于“等待多个进程”的新注释
    猜你喜欢
    • 2011-06-17
    • 1970-01-01
    • 1970-01-01
    • 2021-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-20
    • 1970-01-01
    相关资源
    最近更新 更多