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

Langage PHP Discussion :

Fonctions exec / system : PID d'un processus


Sujet :

Langage PHP

  1. #1
    Membre Expert
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 349
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 349
    Par défaut Fonctions exec / system : PID d'un processus
    Bonjour à tous!

    Alors voila, je suis en train d'essayer de fabriquer une interface web à wget en PHP.

    Ma page PHP est donc amenée à lancer des commandes linux via les fonction exec ou system, notamment la fonction wget, en background (&), pour ne pas "bloquer" la page.

    En shell, la commande suivante me renvoie à l'écran le numéro du processus créé pour wget.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    wget -O "monfichier.txt"  "http://monurl.com"  --limit-rate=30K -a monlog.log -print > /dev/null 2> /dev/null &
    Mon idée et de la lancer la même commande depuis ma page, et de récupérer le numéro du processus créé pour le sauvegarder et pouvoir le gérer plus tard (pause/annuler...).

    En php donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    echo exec("wget -O \"monfichier.txt\"  \"http://monurl.com\"  --limit-rate=30K -a monlog.log -print > /dev/null 2> /dev/null &");
    Seulement, si cette ligne créée bien le processus (je le vois en shell ps -A | grep wget), elle ne m'affiche rien sur la page!

    En comparaison, echo exec("whoami"); m'affiche bien "www-data", et la commande "system" qui est supposée afficher le retour écran ne fonctionne pas d'avantage...

    Quelqu'un aurait une idée pour récupérer le PID d'un processus Linux lancé à partir d'une commande exec ou system depuis une page PHP?

    Merci!!!

  2. #2
    Membre Expert
    Avatar de transgohan
    Homme Profil pro
    Développeur Temps réel Embarqué
    Inscrit en
    Janvier 2011
    Messages
    3 149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Temps réel Embarqué

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 149
    Par défaut
    Je ne suis pas une lumière en commande unix mais tu rediriges bien la sortie vers /dev/null non ?
    Dans ce cas il est un petit peu normal que de ne rien récupérer.

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 448
    Par défaut
    Hello,

    En bash tu peux déterminer le process du dernier exécutable lancé en utilisant $!.
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    any_command args &
    my_child_PID=$!
    Dès lors il faudrait que tu enregistres la commande dans un fichier texte, et que tu l’exécutes depuis php.
    Ensuite tu peux mettre le PID dans un fichier, il n'y aura plus qu'à le lire depuis php pour connaitre le pid.

    Sinon il y à le binaire pidof :
    http://pwet.fr/man/linux/administration_systeme/pidof

    Autrement, tu peux lancer des ps aux | grep wget en PHP et parser le résultat (depuis $output !!) pour déterminer le PID.

    Je n'ai fait que googler pour trouver cela ; )

    A+

  4. #4
    Membre éprouvé
    Homme Profil pro
    Lycéen
    Inscrit en
    Décembre 2008
    Messages
    106
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Décembre 2008
    Messages : 106
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <?php
    function get_pids($command)
    {
        $pid = exec("ps -eo pid,command | grep \"$command\" | awk '{print $1}'", $output);
        return $output;
    }
     
    $pids = get_pids($cmd);
    foreach($pids as $pid) echo "process id $pid \n";
    ?>

Discussions similaires

  1. [Système] Fonction exec, pb de processus
    Par bkadoum dans le forum Langage
    Réponses: 1
    Dernier message: 23/09/2008, 14h03
  2. [Système] Problème avec la fonction exec()
    Par ben_harper dans le forum Langage
    Réponses: 13
    Dernier message: 28/06/2006, 11h32
  3. [VISUAL 6] Fonction exec
    Par Nelmo dans le forum MFC
    Réponses: 2
    Dernier message: 04/06/2006, 23h01
  4. obtenir le path complet d'un processus en fonction de son PID
    Par violent_ken dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 02/05/2006, 16h43
  5. [Système]communiquer avec un processus externe sous windows
    Par tweety dans le forum Général Java
    Réponses: 4
    Dernier message: 14/11/2005, 17h17

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