Shell:非子进程的返回值

时间:2013-01-04 11:13:44

标签: shell parallel-processing return-value kill

在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的返回值?

2 个答案:

答案 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 &

希望它对面临同样问题的其他人有用。