如何在后台执行多个bash函数但等待输出?

时间:2013-06-26 06:29:57

标签: bash parallel-processing

我正在尝试使用bash函数来执行多个Web抓取(使用curl等),我想让它们全部在后台执行,并且所有打印输出到stdin。这怎么可能?

2 个答案:

答案 0 :(得分:8)

这很简单!即使对于函数,您也可以使用&

#!/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在后​​台运行并打印到stdoutPress ENTER or type command to continue呈现(当我从开始编写脚本时),并显示后台x进程在主脚本完成后完成其作业。如果您想等到所有后台进程完成,您可以使用$!获取后台进程的PID,并将内置wait <PID>作为最后一个函数。

答案 1 :(得分: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

快乐!