포크 외부에서 포크된 프로세스의 변수를 변경하시겠습니까?

포크 외부에서 포크된 프로세스의 변수를 변경하시겠습니까?

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

관련 정보