
이론적으로 이 블록에서는 "running..."이 한 번(또는 그 이하)만 표시되어야 하지만 실제로는 수동으로 종료될 때까지 반복됩니다. "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
데몬을 통해 이 기능을 구현하는 방법을 사용할 수도 있습니다.물고기.