在后台运行多个程序并检查它们的返回值

Jyt*_*tug 5 shell scripting background-process

假设我想一次运行几个(比如三个)程序,像这样

program1 & program2 & program3 &
Run Code Online (Sandbox Code Playgroud)

如果我想知道它们pid's,我认为最好的方法是存储它们,像这样

program1 &
pid1=$!
program2 &
pid2=$!
...
Run Code Online (Sandbox Code Playgroud)

但是现在,如果我想知道它们是否已经结束,如果是,它们返回了什么值呢?像这样的东西:

if [ program1 has ended ]; then
    do something with its return value
fi
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激

sjs*_*sam 1

一个简单的解决方案是将消息写入日志文件

比如说,对于程序 1,执行如下操作:

#!/bin/bash
.
.
your stuff
.
.
end_time==$(date)
echo "program1 ended at $end_time" > program1_log
Run Code Online (Sandbox Code Playgroud)

另一个想法是创建一个空文件来标记进程结束

#!/bin/bash
.
.
your stuff
.
.
echo $? > /some/path/program1_ended #storing the exit value
#disadvantage is that you can't verify if intermediate commands failed.
Run Code Online (Sandbox Code Playgroud)

然后检查做

   if [ -e /some/path/program1_ended ]
   then
   exit_status=$( </some/path/program1_ended )
   rm /some/path/program1_ended #Deleting the file, getting ready for next run
   .
   .
   Do something
   else
   echo "program1 has not ended yet"
  fi
Run Code Online (Sandbox Code Playgroud)