Multithreading dans Bash [dupliquer]

Cette question a déjà une réponse ici:

Je voudrais introduire la fonctionnalité multithreading dans mon script shell.

J'ai un script qui appelle la fonction read_cfg() avec des arguments différents. Chacun de ces appels de fonction est indépendant.

Serait-ce être possible d'instancier ces appels de fonction (Pas de scripts) parallèlement. S'il vous plaît laissez-moi comment pouvons-nous y parvenir.. ?

64
demandé sur CaptJak 2010-03-11 17:48:09

3 réponses

Bien sûr, ajoutez simplement & après la commande:

read_cfg cfgA &
read_cfg cfgB &
read_cfg cfgC &
wait

Tous ces travaux seront alors exécutés en arrière-plan simultanément. La commande optionnelle wait attendra alors la fin de tous les travaux.

Chaque commande s'exécutera dans un processus séparé, donc ce n'est techniquement pas "multithreading", mais je crois que cela résout votre problème.

137
répondu Martin 2010-03-11 15:01:24

Vous pouvez exécuter plusieurs copies de votre script en parallèle, chaque copie pour différentes données d'entrée, par exemple pour traiter tout *.fichiers cfg sur 4 cœurs:

    ls *.cfg | xargs -P 4 -n 1 read_cfg.sh

Le read_cfg.sh le script ne prend qu'un seul paramètre (comme appliqué par -n)

23
répondu tnorgd 2013-03-15 10:40:42

Le contrôle du travail Bash implique plusieurs processus, pas plusieurs threads.

Vous pouvez exécuter une commande en arrière-plan avec le suffixe &.

Vous pouvez attendre la fin d'une commande d'arrière-plan avec la commande wait.

, Vous pouvez exécuter plusieurs commandes en parallèle en les séparant avec |. Cela fournit également un mécanisme de synchronisation, puisque stdout d'une commande à gauche de | est connecté à stdin de la commande à droite.

19
répondu mouviciel 2010-03-11 14:54:22