命令行中的多线程可能吗?

时间:2013-03-21 21:55:33

标签: shell command-line ssh command

我正在使用以下命令检查文本文件中域名列表中的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个域吗?

1 个答案:

答案 0 :(得分:2)

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

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

注意

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