如何等待后台进程完成?

如何等待后台进程完成?

我正在使用带有 bash shell 的 Amazon Linux。我想在后台运行几个进程,然后等待它们完成(带有成功或错误退出代码),然后再继续。所以我尝试:

node test.js 2>&1 | tee --append $TFILE1 &
proc1=$!
node SkyLocal.js 2>&1 | tee --append $TFILE2 &
proc2=$!

wait proc1
rc1=$?
wait proc2
rc2=$?

但我收到这些错误:

/home/jboss/.jenkins/jobs/myproject/workspace/automated-tests/nodejs/run_tests.sh: line 36: wait: `proc1': not a pid or valid job spec
/home/jboss/.jenkins/jobs/myproject/workspace/automated-tests/nodejs/run_tests.sh: line 38: wait: `proc2': not a pid or valid job spec

如何捕获后台进程的 PID,然后等待该进程完成后再继续?

答案1

正如错误消息所暗示的那样,该wait命令不会尝试通过变量名称查找 pid(尽管作为内置命令,理论上它可以做到这一点)。

您需要传递wait存储在 proc1 和 proc2 变量中的实际 pid 值(或作业号)。您可以$像往常一样通过在变量名称前面添加来实现这一点。这将导致 shell 在将变量传递给命令之前用这些值替换变量名wait

相关内容