Você pode usar software adicional ou apenas bash? Parece que GNU Parallel
é o que você precisa para sua tarefa. Ou pelo menos -n
e -P
argumentos para xargs
Como posso fazer processamento paralelo no bash?
Minha abordagem, no meu script bash, incluiu tantas tarefas em segundo plano com &
e, em seguida, estou adicionando cada ID de processo usando uma matriz, então estou buscando essa matriz usando um loop e usando o comando wait , mas de alguma forma o comando wait
não está funcionando.
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 –
Você pode usar software adicional ou apenas bash? Parece que GNU Parallel
é o que você precisa para sua tarefa. Ou pelo menos -n
e -P
argumentos para xargs
Esta linha aprimorada deve corrigir a primeira parte do seu script:
process_list+=($pid $pid_1)
E esta deve ser a segunda parte. Observe que não foi testado.
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
produz uma lista de processos em execução ( -o pid
) sem a linha de título ( -h
).
Encaminha ( |
) esta lista para grep
grep
procura o $job
e, se ele encontrar ( &&
), o bloco de comandos ( {echo ...}
) é executado
Tags bash