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

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

이론적으로 이 블록에서는 "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데몬을 통해 이 기능을 구현하는 방법을 사용할 수도 있습니다.물고기.

관련 정보