フォーク外でフォークされたプロセスの変数を変更しますか?

フォーク外でフォークされたプロセスの変数を変更しますか?

理論的には、このブロックを使用すると、「実行中...」は一度(またはそれ以下)しか表示されませんが、実際には手動で終了するまで繰り返されます。 「start」関数を呼び出した後、分岐されたプロセスの外側から分岐されたプロセスの内部のx値をfalseに変更するにはどうすればよいですか?

export x=true
start() {
while [ $x == true ]; do
    echo running...
    sleep 1
done
}

start &
x=false

ベストアンサー1

ここでの簡単な解決策は、ある種のプロセス間通信を使用してターゲットプロセスに変更を通知することです。たとえば、次の信号を使用できます。

#!/bin/sh

export x=true
start() {
trap x=false USR1
while [ $x = "true" ]; do
    echo running...
    sleep 1
done
}

start &
sleep 5
kill -USR1 $!
wait

次の出力を生成します。

$ ./testit.sh
running...
running...
running...
running...
running...
$

おすすめ記事