理论上,使用此块,您应该只看到“正在运行...”一次(或更少),但实际上,它会重复,直到被手动终止。调用函数“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。