GNU/Linux >> Tutoriales Linux >  >> Linux

Cuatro tareas en paralelo... ¿Cómo hacer eso?

Tengo un montón de imágenes PNG en un directorio. Tengo una aplicación llamada pngout que ejecuto para comprimir estas imágenes. Esta aplicación es llamada por un script que hice. El problema es que este script hace uno a la vez, algo como esto:

FILES=(./*.png)
for f in  "${FILES[@]}"
do
        echo "Processing $f file..."
        # take action on each file. $f store current file name
        ./pngout -s0 $f R${f/.//}
done

Procesar solo un archivo a la vez lleva mucho tiempo. Después de ejecutar esta aplicación, veo que la CPU es solo del 10 %. Entonces descubrí que puedo dividir estos archivos en 4 lotes, poner cada lote en un directorio y disparar 4, desde cuatro ventanas de terminal, cuatro procesos, así que tengo cuatro instancias de mi script, al mismo tiempo, procesando esas imágenes y el el trabajo toma 1/4 del tiempo.

El segundo problema es que perdí tiempo dividiendo las imágenes y lotes y copiando el script a cuatro directorios, abrí 4 ventanas de terminal, bla bla…

¿Cómo hacer eso con un guión, sin tener que dividir nada?

Me refiero a dos cosas:primero, ¿cómo puedo desde un script bash, disparar un proceso al fondo? (¿simplemente agregue &al final?) Segundo:¿cómo dejo de enviar tareas al fondo después de enviar las cuartas tareas y pongo el script en espera hasta que finalicen las tareas? Quiero decir, ¿solo enviar una nueva tarea al fondo cuando finaliza una tarea, manteniendo siempre 4 tareas en paralelo? si no lo hago, el bucle disparará millones de tareas al fondo y la CPU se obstruirá.

Respuesta aceptada:

Si tiene una copia de xargs que admite la ejecución en paralelo con -P , simplemente puedes hacer

printf '%s
Linux
  1. Cómo crear un script de un comando de Linux

  2. ¿Cómo enumerar los archivos que se cambiaron en un cierto intervalo de tiempo?

  3. ¿Cómo reproducir un sonido cuando la ejecución del script está lista?

  4. Bash + ¿Cómo salir del script secundario y del script principal en ambas ocasiones?

  5. ¿Cómo ejecutar un script?

Cómo ejecutar un script de Python en PHP

Cómo ejecutar un script Bash

¿Cómo ejecutar un comando en un script de Shell?

¿Cómo creo un script de configuración?

¿Cómo medir el tiempo medio de ejecución de un script?

Cómo controlar el tiempo que los usuarios dedican a