在shell脚本中,我试图等待非子进程。我从以下方面参考了如何做到: WAIT for "any process" to finish
我的shell脚本结构是:
Main.sh
func1(){
return 1
}
func2(){
# Wait for func1 to finish
while kill -0 "$pid_func1"; do
sleep 0.5
done
}
# Call function 1 in background
func1 &
pid_func1=$!
func2 &
在这种情况下,如何在函数func2中收到func1的返回值?
答案 0 :(得分:2)
您通常无法捕获非子进程的退出状态。您可能能够处理涉及将退出代码记录到状态文件然后读取值的内容,但否则您将无法捕获值
答案 1 :(得分:0)
我使用了另一个shell变量来存储这种情况下的返回状态,并检查了所需的shell变量的值。找到下面的示例shell脚本来模拟场景。
#!/bin/bash
func1(){
retvalue=23 # return value which needs to be returned
status_func1=$retvalue # store this value in shell variable
echo "func1 executing"
return $retvalue
}
func2(){
# Not possible to use wait command for pid of func1 as it is not a child of func2
#wait $pid_func1
#ret_func1=$?
while kill -0 "$pid_func1"; do
echo "func1 is still executing"
sleep 0.5
done
echo "func2 executing"
#echo "func1 ret: $ret_func1"
echo "func1 ret: $status_func1"
}
# Main shell script starts here
func1 &
pid_func1=$!
func2 &
希望它对面临同样问题的其他人有用。