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

Shell et commandes GNU Discussion :

Tester si le shell script est lance en background ou pas ?


Sujet :

Shell et commandes GNU

  1. #1
    Membre habitué
    Homme Profil pro
    Dev C++, CUDA
    Inscrit en
    Mai 2005
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Nouvelle-Zélande

    Informations professionnelles :
    Activité : Dev C++, CUDA
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2005
    Messages : 83
    Points : 129
    Points
    129
    Par défaut Tester si le shell script est lance en background ou pas ?
    Bonjour

    J'ai un script bash

    Je veux tester si mon script a été lancé en background ou pas ?
    Exemple, si je lance
    ./monscript.sh
    Il me retoune Foreground

    Et si je lance :
    ./monscript.sh &
    Il me retourne Background

    (si vous avez une solution pour csh aussi, ca m'interesserait bcp :-) )
    Merci

  2. #2
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Points : 28 123
    Points
    28 123
    Par défaut
    Bonjour,

    ne te rends pas la main

    affiche le pid du processus qui vient d'être lancé, puis te rend la main.

    En quoi préférerais-tu un affichage de Foreground dans le premier cas, sachant que de toute manière tu ne récupéreras pas ton shell tant que mon_script n'aura pas fini de s'exécuter ?

  3. #3
    Membre habitué
    Homme Profil pro
    Dev C++, CUDA
    Inscrit en
    Mai 2005
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Nouvelle-Zélande

    Informations professionnelles :
    Activité : Dev C++, CUDA
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2005
    Messages : 83
    Points : 129
    Points
    129
    Par défaut
    En fait ... ce que je veux vraiment faire est un peu plus compliqué ...

    Je veux que si mon script est lance en foreground, a la fin de l'execution, il laisse l'utilisateur rentrer un petit commentaire avant de terminer le script. Chose faite sous la forme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    echo -n "Result for dotruns log file (Type control-D to end) >"
    cat | tee -a $DESTDIR/log >> $dotruns
    Le probleme c'est j'ai besoin parfois de lancer mon script a la chaine, par un autre script ... et la ... je peux pas faire un Ctrl-D pour terminer chaque run ... Il sera interessant que mon premier script detecte si il a ete lancé en background ou pas. Si c'est le cas, il ne demande pas le commentaire.

    Et enfin ... ca va surement me servir plus tard de savoir detecter si un script est lance en background ou pas

  4. #4
    Membre confirmé Avatar de iblis
    Inscrit en
    Janvier 2007
    Messages
    510
    Détails du profil
    Informations personnelles :
    Âge : 57

    Informations forums :
    Inscription : Janvier 2007
    Messages : 510
    Points : 570
    Points
    570
    Par défaut
    Une ou deux indications en vrac.

    $! contient le PID du dernier processus lancé en background.

    $$ le PID du processus courant.

    Tu peux tenter quelque chose du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    #!/bin/bash
    if ps | grep $$ | grep -v grep | awk '{print $3}' | grep R 
    then
            echo foreground
    else
            echo background
    fi

  5. #5
    Membre habitué
    Homme Profil pro
    Dev C++, CUDA
    Inscrit en
    Mai 2005
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Nouvelle-Zélande

    Informations professionnelles :
    Activité : Dev C++, CUDA
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2005
    Messages : 83
    Points : 129
    Points
    129
    Par défaut
    Bonjour,

    $! : renvoie le dernier job lance en background mais ... par le shell en cours. Comme c'est un script, il est sous un autre shell et donc quand je regarde $!, c'est vide. Enfin ... c'est ce que je deduis de mes tests ....

    J'ai test ton script, ca ne marche pas. Il renvoie tout le temps Background. Je pense c'est parce que on a pas le meme format de sortie par defaut de ps. Mais je me suis inspire de ton script, et j'ai trouve que dans la sortie de ps, la colonne STAT indique un "+" lorsque le processus est en foreground. J'ai donc fait ce script :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    #!/bin/sh
    if ps -eo pid,stat | grep $$ | awk '{print $2}' | grep "+" > /dev/null
    then 
            echo "running in foreground"
    else
            echo "running in background"
    fi
    Ca marche sur mes konsoles

    En tout cas merci bcp

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

Discussions similaires

  1. [Batch] W10 Détecter si le script est lancé en administrateur
    Par Damien175 dans le forum Scripts/Batch
    Réponses: 10
    Dernier message: 18/06/2015, 18h15
  2. Réponses: 7
    Dernier message: 28/04/2009, 16h05
  3. tester une fenêtre pendant qu'une autre est lancée :
    Par Rniamo dans le forum GTK+ avec C & C++
    Réponses: 5
    Dernier message: 25/05/2008, 17h12
  4. [Shell Script] Quel est l'utilisateur d'un terminal ?
    Par damien27000 dans le forum Linux
    Réponses: 3
    Dernier message: 25/07/2007, 16h37
  5. Réponses: 3
    Dernier message: 23/02/2006, 08h30

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