Eu tenho a função loop:
while IFS='|' read -r keyword; do
xterm -e "echo -ne '\e[8;5;60t'; program -command"
done < ./filename
Eu preciso abrir apenas 5 terminais com program -command
, mas quando um terminal faz o trabalho e fecha, então o loop deve começar a abrir novamente até 5 janelas abertas.
Eu tento
[ $( jobs | wc -l ) -ge 5 ] && wait
Mas depois que um é feito, o trabalho somente 4 é aberto e este espera até o último, até que esteja aberto e comece novamente 5 vezes.
Talvez alguns possam modificar esse scirpt para funcionar
while [ 'ps -p ${pid1},${pid2} | wc -l' < 5 ]
do
sleep 1
done
Este scirpt executa cada novo segundo terminal ...
while IFS='|' read -r keyword; do
xterm -e "echo -ne '\e[8;5;60t'; program -command" &
sleep 1
done < ./filename
Mas eu preciso de algo para verificar se há 5x terminais abertos, se não, então, execute o loop mais uma vez.
while IFS='|' read -r keyword; do
xterm -e "echo -ne '\e[8;5;60t'; program -command"
# Script to block loop until less than 5 terminal are open
while [ 'ps -p ${pid1},${pid2} | wc -l' < 5 ]
do
echo "There is less than 5 terminals opened"
done
done < ./filename
Eu encontrei algo assim, como modificar isso?
while [ $(ps -ef | grep KEYWORD | grep -v grep | wc -l) -gt 0 ]; do
sleep 1
done
Eu fiz o script
child_count=$(($(pgrep --parent $$ | wc -l) - 1))
if [ "$child_count" -lt "5" ]; then
echo "Opened terminals: $child_count"
else [ "$child_count" -ge "5" ]
echo "Too many termianls: $child_count"; wait
fi
Mas ainda está esperando até que tudo esteja terminado, isso deve verificar a cada 10 segundos se um terminal for menor que 5
Eu encontrei a solução:
check_processes(){
while true; do
child_count=$(($(pgrep --parent $$ | wc -l) - 1))
if [ "$child_count" -lt "5" ]; then
echo "Opened terminals: $child_count"
break
else [ "$child_count" -ge "5" ]
echo "Too many termianls: $child_count"; sleep 10; check_processes
fi
done
}
check_processes