0

シェルスクリプトでは、子プロセス以外を待機しようとしています。私はそれを行う方法についての参照を得ました: 「任意のプロセス」が終了するのを待ちます

私のシェルスクリプトの構造は次のとおりです。

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 の戻り値を受け取るにはどうすればよいですか?

4

2 に答える 2

2

通常、子プロセス以外の終了ステータスを取得することはできません。終了コードをステータスファイルに記録してから値を読み取ることを含む何かを行うことができるかもしれませんが、そうでなければ値をキャプチャすることはできません

于 2013-01-04T11:18:08.633 に答える
0

この場合、戻りステータスを格納するために別のシェル変数を使用し、必要に応じてこのシェル変数の値をチェックしました。以下のサンプル シェル スクリプトを見つけて、シナリオをシミュレートします。

#!/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 &

同じ問題に直面している他の人に役立つことを願っています。

于 2013-01-05T07:01:54.893 に答える