我正在尝试制作一个 bash 函数来执行多个网络抓取(使用 curl 等),并且我想让它们都在后台同时执行,并将它们的输出打印到标准输入。这怎么可能?
问问题
7487 次
2 回答
8
这是一件容易的事!您&
甚至可以将其用于bash函数:
#!/usr/bin/bash
x() { echo =$1=Solaris; sleep 1; echo =$1=East; sleep 1; echo =$1=Panta Rhei;}
x one&
x two&
echo Syrius; sleep 1
echo After Crying
输出:
=one=Solaris
Syrius
=two=Solaris
=one=East
=two=East
After Crying
Press ENTER or type command to continue
=one=Panta Rhei
=two=Panta Rhei
所以x
在后台运行并打印到stdout
. 由vimPress ENTER or type command to continue
呈现(当我从vim启动脚本时)并显示后台进程在主脚本完成后完成其工作。如果您想等到所有后台进程完成您可以使用获取后台进程的 PID 和内置作为最后一个函数。x
$!
wait <PID>
于 2013-06-26T07:16:55.903 回答
2
对于其他任何一起来的人:
鉴于以下情况:
function par() {
parallel sh -c ::: "sleep 1" "sleep 1" "sleep 1"
}
function seq() {
sleep 1
sleep 1
sleep 1
}
对这两个命令计时表明第一个函数同时执行,而第二个函数等待每个命令完成,然后再继续执行下一个命令:
$ time par && time seq
real 0m1.215s
user 0m0.147s
sys 0m0.085s
real 0m3.028s
user 0m0.011s
sys 0m0.012s
幸福!
于 2013-06-26T06:35:06.820 回答