理論的には、このブロックを使用すると、「実行中...」は一度(またはそれ以下)しか表示されませんが、実際には手動で終了するまで繰り返されます。 「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...
$
答え2
を使用している場合は、ksh93
フィールド関数を使用して共有変数を実装できます(参照:https://stackoverflow.com/questions/13726293/environment-variables-to-be-used-across-multiple-korn-ksh93-shell-scripts-get)
あるいはfish
、それを使用してデーモンを介してこの機能を実装することもできます。魚d。