Bash에서 많은 백그라운드 작업을 기다리는 방법

Bash에서 많은 백그라운드 작업을 기다리는 방법

Bash에서 병렬 처리를 수행하는 방법은 무엇입니까?

내 bash 스크립트에서 내 접근 방식은 많은 백그라운드 작업을 추가한 &다음 배열을 사용하여 각 프로세스 ID를 추가한 다음 루프를 사용하여 해당 배열을 가져오고 그 안에 wait 명령을 사용하는 것입니다. 그러나 어쨌든 wait명령은 재직 중이 아닙니다.

내 코드는 다음과 같습니다

for i in some path 
do 
    ls -d $i | xargs du -kh --max-depth=0 |sed 's/\t/,/g' >> $TEMP/Outfile/disk_usage_Session_wise.csv & 
    pid=$!
    ls -d $i/session | xargs du -kh --max-depth=1 | sed 's/\t/,/g' >> $TEMP/Outfile/disk_usage_Session_wise.csv & 
    pid_1=$! 
    process_list=($pid $pid_1) 
done 

for job in echo ${process_list[@]} 
    do 
    echo "$job is running" 
    wait $job # this command is not working 
done –

답변1

다른 소프트웨어를 사용할 수 있나요? 아니면 bash만 할 수 있나요? GNU Parallel이것이 작업을 완료하는 데 필요한 것 같습니다 . 아니면 적어도 논쟁이 -n있습니다-Pxargs

답변2

이 개선된 줄은 스크립트의 첫 번째 부분을 수정해야 합니다.

process_list+=($pid $pid_1) 

이건 2부여야 합니다. 테스트되지 않았음을 참고하시기 바랍니다.

for job in ${process_list[@]} 
do 
    ps -ho pid | >/dev/null grep $job && {
        echo "$job is running" 
        wait $job # this command should be ok now         
    }
done
  • ps -ho pid-o pid헤더 줄( ) 없이 실행 중인 프로세스 목록( )을 생성합니다 -h.

  • |이 목록을 ( )에게 전달합니다.grep

  • grep$job()을 찾으면 명령 &&블록을 실행하십시오 (){echo ...}

관련 정보