특정 상태에 도달한 하위 프로세스를 계산하는 방법

특정 상태에 도달한 하위 프로세스를 계산하는 방법

&20개 이상의 하위 프로세스( 백그라운드에서 시작된 기능)를 시작하는 bash 스크립트가 있고 이미 실행 중인 하위 프로세스 수를 사용자에게 알려주는 진행률 표시기를 포함하려고 합니다.

문제는 이러한 하위 프로세스를 시작하는 데 꽤 오랜 시간이 걸린다는 것입니다(네트워크에 따라 약 20초). 성공적으로 시작된 하위 프로세스 수를 계산하는 방법이 있습니까?

bash 함수에 어떤 코드든 넣을 수 있으며 하위 프로세스가 준비되면 함수가 실행됩니다. 그런데 준비된 작업의 수를 담는 전역 변수를 늘리는 좋은 방법을 모르겠습니다.

답변1

외부 파일을 전역 변수로 사용할 수 있습니다. 여기에 예가 있습니다.

file="$(mktemp)"
f() { sleep 3; echo x; sleep 3; }
for i in {1..10} ; do
    >>"$file" f &
done

switch=true
while $switch; do
    sleep 1
    cnt=$(wc -l "$file")
    cnt="${cnt%%${file}}"    #this is needed to remove the file name
                             #from the output of wc -l
    echo "$cnt"
    [ "$cnt" -ge 5 ] && switch=false
done
rm "$file"

저장 example하고 소싱하면 다음이 제공됩니다.

$ . example
0
0
10

일단 액세스 권한을 얻으면

cnt=$(wc -l "$file")
cnt="${cnt%%${file}}"

이 코드를 진행률 표시줄로 수정하는 것은 쉽습니다.

[ "$cnt" -ge 5 ] && switch=false상황에 맞게 영원주기 차단기를 조정하는 것을 잊지 마십시오 .

관련 정보