export
GNU 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
실행할 때마다 &의 가치가 다시 표시되나요?STATUS1
STATUS2
답변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 작업 제어를 읽어야 하는 경우).