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
있습니다-P
xargs
답변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 ...}