Pause toutes les tâches à l'exception de x nécessitant une CPU

J'ai environ 50 dossiers de données à traiter, et j'ai un script ruby ​​qui traite les fichiers d'un dossier (quel dossier il traite est basé sur un fichier de configuration .yml). Et un ordinateur avec quatre CPU.

Je voudrais pouvoir démarrer les 50 processus, mais seulement 4 d'entre eux fonctionnent activement à tout moment, et les autres 46 sont en panne. Une fois l'un des processus terminé, j'aimerais que l'un des processus en pause ne soit pas mis en pause, jusqu'à ce que tous les 50 soient terminés. De cette façon, je peux faire

./super_script.rb > folder_1_log.txt *edit config.yml* ./super_script.rb > folder_2_log.txt *edit config.yml* ... 

Et mettez l'accent sur quelque chose d'autre jusqu'à ce que le traitement soit terminé.

Est-il possible de faire cela? Y a-t-il des termes pour ce que je souhaite que je peux google?

(Une autre alternative serait de faire de super_script capable de multi-threading – peut-être que je suis un chat effrayant pour ne pas adopter cette approche)

(Le système d'exploitation est Ubuntu Linux, et la plupart du temps CPU n'est pas pris en charge par super_script.rb, mais par d'autres programmes ruby ​​qu'il appelle via system ())

Voici un script bash qui a l'air de faire quelque chose de proche de ce que vous voulez faire – il démarre un certain nombre de processus en parallèle, mais veille à ce que plus que n soient toujours en cours d'exécution en même temps.

D'autre part, si ce que vous faites est lié au disque, plutôt que lié à la CPU (je demande parce que vous dites que vous avez "50 dossiers de données à traiter"), alors vous pouvez être mieux Exécution de tous vos processus en série pour éviter la contention du disque entre les processus.