我正在使用带有 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
。