GNU Parallel을 사용할 때 bash 스크립트에서 EXPORT를 사용하는 것이 얼마나 안전합니까?

GNU Parallel을 사용할 때 bash 스크립트에서 EXPORT를 사용하는 것이 얼마나 안전합니까?

exportGNU Parallel을 사용할 때 bash 스크립트에서 사용하는 것이 얼마나 안전합니까?

부모 스크립트가 있습니다. parent.sh

(echo child.sh & echo child_two.sh) || parallel bash

wait
if [[ "$STATUS1" == "0" && "$STATUS2" == "0" ]];
then
    //continue
else
    //stop the process
fi

child.sh

STATUS1다른 프로세스 기반 얻기

export STATUS1

child_two.sh

다른 프로세스를 기반으로 STATUS2 가져오기

export STATUS2

사용하는 것이 안전한가요? export실행할 때마다 &의 가치가 다시 표시되나요?STATUS1STATUS2

답변1

환경 변수는 하위 프로세스로 전달되며 그 반대의 경우는 아닙니다.

정보를 상위 프로세스로 전송하려면 이 데이터를 각 하위 프로세스의 파일에 저장하고 cat하위 프로세스가 종료된 후 이 파일에 파일을 저장해야 합니다.

tmp=$(mktemp -d)
child.sh $tmp/file & child_two.sh $tmp/file_two
wait 
cat $tmp/* 
rm $tmp -rf

일부 최적화를 수행하려면 더 높은 수준의 언어를 사용해도 됩니다.

답변2

공부하면 도움이 될 것 같아요parset https://www.gnu.org/software/parallel/parset.html

$ parset myvar 'echo do stuff with {};(exit {}); echo $?' ::: 0 0 1 2 3 0 0
$ echo "${myvar[3]}"

답변3

export폐기될 프로세스에 변수를 설정 하면 이를 수행할 수 없으며 부모는 이를 결코 볼 수 없습니다.

그러나 bash를 사용한다고 가정하면 다음 중 하나가 필요하지 않습니다.

child.sh &
child_two.sh &

wait -n
STATUS1=$?
wait -n
STATUS2=$?

wait -n종료 상태 반환하나프로세스를 반복하여 상태를 가져옵니다.다른.

이 방법의 유일한 문제점은 어떤 상태가 어떤 프로세스에서 나오는지 알 수 있는 방법이 없다는 것입니다(bash 작업 제어를 읽어야 하는 경우).

관련 정보