IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Linux Discussion :

[BASH] gestion des processus


Sujet :

Linux

  1. #1
    Membre habitué
    Homme Profil pro
    Inscrit en
    Avril 2005
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38

    Informations forums :
    Inscription : Avril 2005
    Messages : 277
    Points : 143
    Points
    143
    Par défaut [BASH] gestion des processus
    Bonjour,

    Je souhaite effectuer un programme de traitement en bash.
    Je souhaiterais faire un système de boucle qui serait capable de gèrer le nombre de processus fils lancés.

    Concrètement, je boucle sur ma liste d'actions à faire, et tant que la liste n'est pas vide je continue, et si un processus fils se termine (avec code de retour), je lance l'action suivante.

    Je pensait utiliser des fork et waitpid (trucs du genre) mais je n'y arrive pas !

    Je précise que je tiens vraiment à le faire en BASH (ou autre langage shell) et pas en compilé ou semi-compilé.

    Est-ce possible ? Merci à vous !

  2. #2
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 720
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 720
    Points : 31 043
    Points
    31 043
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par JamesP Voir le message
    Je pensait utiliser des fork et waitpid (trucs du genre) mais je n'y arrive pas !...
    Je précise que je tiens vraiment à le faire en BASH (ou autre langage shell) et pas en compilé ou semi-compilé.
    Les primitives fork() et wait() sont des primitives C. Donc si tu veux les utiliser, faudra faire du compilé.

    Sinon en bash tu peux lancer ta commande en arrière plan (commande &)


    Citation Envoyé par JamesP Voir le message
    Concrètement, je boucle sur ma liste d'actions à faire, et tant que la liste n'est pas vide je continue, et si un processus fils se termine (avec code de retour), je lance l'action suivante.
    Si tes processus sont indépendants, pourquoi attendre qu'ils se terminent ???

  3. #3
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Points : 2 505
    Points
    2 505
    Par défaut
    Tu fais une boucle avec un wait. Le wait bloque jusqu'a ce qu'un fils termine. Après le wait tu regarde combien de fils tournent encore, et tu remplaces les process manquants.

    Evidemment c'est approximatif car des processes peuvent mourir entre le moment où tu les comptes et le moment où tu les lances. Mais ça marche en gros.

  4. #4
    Membre habitué
    Homme Profil pro
    Inscrit en
    Avril 2005
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38

    Informations forums :
    Inscription : Avril 2005
    Messages : 277
    Points : 143
    Points
    143
    Par défaut
    Ok je peux faire ça ...

    Mais mon but est de faire une gestion de tache ...

    Exemple :
    Tous les soirs, à 01h00 j'envoie et recoit 20Mo de données sur 20 serveurs.
    Plutot que tout se fasse en même temps, je souhaiterais que mon prog gère lui même la charge et controle qu'il y en ai 3 MAX en même temps ! Et aussi bein gèrer le code de retour de chaque fils pour savoir si il c'est fini bien ou non.

    C'est une version simplifiée, mon but est de faire un serveur de backup perso.

    Je n'ai pas réussi à trouver d'ordonanceur tout fait, genre on lui balance des tâches à faire (commandes) et il gère les fils tout seul ... Donc je veux m'en faire un mini très simple !

  5. #5
    Rédacteur
    Avatar de lavazavio
    Homme Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 673
    Points : 2 412
    Points
    2 412
    Par défaut
    Tu as regardé du coté de backupPC à tout hasard ?

  6. #6
    Membre habitué
    Homme Profil pro
    Inscrit en
    Avril 2005
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38

    Informations forums :
    Inscription : Avril 2005
    Messages : 277
    Points : 143
    Points
    143
    Par défaut
    Oui j'ai une solution backuppc qui tourne, mais je n'arrive pas à l'utiliser UNIQUEMENT comme ordonnanceur avec des commandes personnalisées.

    Mon but est d'avoir différents "types" de backup, par exemple :
    - fichier : simple rsync
    - base : dump puis rsync puis import
    - ........

    Une série d'actions différent selon les types d'actions quoi.
    Et dans ce but, il ne me manque QUE le système de gestion des processus ...

  7. #7
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Points : 2 505
    Points
    2 505
    Par défaut
    En fait une solution simple (à tester) pourrrait être d'installer un handler pour SIGCHLD (trap handler SIGCHLD), et dans ton handler tu lances un nouveau processus. Bon faut aussi prévoir un truc pour quand tu veux t'arrêter.

  8. #8
    Membre habitué
    Homme Profil pro
    Inscrit en
    Avril 2005
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38

    Informations forums :
    Inscription : Avril 2005
    Messages : 277
    Points : 143
    Points
    143
    Par défaut
    Avec un peu de retard le projet est reporté, merci en tous cas je vais tester ça dès que je le reprends en main ^^

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. gestion des processus
    Par yag00 dans le forum Windows XP
    Réponses: 1
    Dernier message: 01/10/2007, 20h42
  2. gestion des processus
    Par nsaybi dans le forum Threads & Processus
    Réponses: 16
    Dernier message: 19/07/2007, 18h00
  3. [DB400][Débutant]comprendre la gestion des processus actif
    Par horalass dans le forum Autres SGBD
    Réponses: 8
    Dernier message: 12/12/2006, 09h26
  4. [Système] gestion des processus linux
    Par julien.63 dans le forum Langage
    Réponses: 6
    Dernier message: 17/11/2006, 23h16
  5. gestion des processus
    Par solawe dans le forum Windows
    Réponses: 2
    Dernier message: 17/11/2006, 12h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo