이론적으로 이 블록을 사용하면 "실행 중..."이 한 번(또는 그 이하)만 표시되어야 하지만 실제로는 수동으로 종료될 때까지 반복됩니다. "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.