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)
任何帮助将不胜感激
一个简单的解决方案是将消息写入日志文件
比如说,对于程序 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)