理論的には、このブロックを使用すると、「実行中...」は一度(またはそれ以下)しか表示されませんが、実際には手動で終了するまで繰り返されます。 「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...
$