web-dev-qa-db-fra.com

Des discussions en bash?

Est-il possible d'utiliser des threads dans les scripts bash. J'ai une classe de pilote dans Java que j'essaie d'exécuter plusieurs instances de en même temps. La seule façon que je sache de le faire est de créer des threads en bash, mais je ne le suis pas sûr si c'est même possible. Toute aide serait appréciée

33
auwall

Bash ne prend pas en charge le thread en soi, mais vous pouvez lancer plusieurs processus Java en arrière-plan, comme:

Java myprog &
Java myprog &
Java myprog &

Vous pouvez examiner autre chose que Python ou Ruby, qui ont des utilitaires de gestion des threads, vous pouvez attendre que chacun se termine et collecter l'état de sortie/sortie, etc.

Edit: Empruntant la suggestion de @ CédricJulien d'utiliser wait, voici un exemple plus complet. Compte tenu de cette MyProg.Java programme:

public class MyProg {
    public static void main(String[] args) {
        System.exit(Integer.parseInt(args[0]));
    }
}

vous pouvez écrire ce qui suit bash-threads.sh script pour en lancer plusieurs instances en parallèle:

#!/bin/bash
set -o errexit

Java MyProg 1 &
pid1=$!
Java MyProg 0 &
pid2=$!
Java MyProg 2 &
pid3=$!

wait $pid1 && echo "pid1 exited normally" || echo "pid1 exited abnormally with status $?"
wait $pid2 && echo "pid2 exited normally" || echo "pid2 exited abnormally with status $?"
wait $pid3 && echo "pid3 exited normally" || echo "pid3 exited abnormally with status $?"

Sa sortie est:

pid1 exited abnormally with status 1
pid2 exited normally
pid3 exited abnormally with status 2
34
Steve Kehlet

Vous ne pourrez pas lancer de "threads bash", mais vous pouvez lancer des sous-processus dans bash, en utilisant simplement le & après la commande, et il la lancera en arrière-plan.

Appelez un wait après avoir lancé vos processus pour attendre qu'ils soient terminés.

Essaye ça

first_command &
second_command &

wait
31
Cédric Julien