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 :

Stopper un processus avec kill


Sujet :

Shell et commandes GNU

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2011
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 16
    Points : 12
    Points
    12
    Par défaut Stopper un processus avec kill
    Bonjour


    J'ai un problème qui me fait tourner en rond, je m'explique j’essaye d'émuler un terminal qui appelle un autre script et de l’arrêter ensuite quand j'en ai plus besoin, donc de le stopper via son pid.


    Quand je fais ça sur ma version de Debian Jessie ça marche nickel :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    x-terminal-emulator -e bash monscript.sh & echo $! >/tmp/terminal.pid
    puis d'un autre terminal:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    kill `cat /tmp/terminal.pid`
    Ça marche et mon script lancé dans le terminal émulé s’arrête et la fenêtre ou il a été lancé se ferme.Par contre sur une version de ubuntu avec les mêmes commandes ça ne marche pas du tout le terminal ou le script a été lancé ne se ferme pas et le script continu sa vie tranquillement.Pourtant il me détecte bien le processus car quand je fais avec Ubuntu

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    kill `cat /tmp/terminal.pid`
    Il me retourne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    kill (1234) aucun processus trouvé
    Ou (1234) et un nombre factice représentant mon processus.Conclusion comment faire pour arriver a stopper ce processus sans avoir cette erreur ?

  2. #2
    Expert éminent sénior Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Points : 12 264
    Points
    12 264
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    rancois@h2g2:~$ sh toto &
    [1] 24267
    francois@h2g2:~$ 
    francois@h2g2:~$ 
    francois@h2g2:~$ 
    francois@h2g2:~$ ls -lrth
    total 328K
    drwx------  2 francois francois  16K Feb 25 21:10 lost+found
    drwxr-xr-x  2 francois francois 4.0K Feb 26 04:34 Music
    drwxr-xr-x  2 francois francois 4.0K Feb 26 11:17 Templates
    drwxr-xr-x  2 francois francois 4.0K Feb 26 11:17 Public
    drwxr-xr-x  5 francois francois 4.0K Feb 26 15:26 Steam
    drwx------  2 francois francois 4.0K Mar  2 17:57 Mail
    drwxr-xr-x  3 francois francois 4.0K Mar  4 21:27 work
    -rwxr-xr-x  1 francois francois  283 Mar  5 20:52 run_backup.sh
    drwxr-xr-x  2 francois francois 4.0K Mar 23 22:44 Desktop
    drwxr-xr-x  7 francois francois 4.0K May  3 19:50 Videos
    drwxr-xr-x  2 francois francois 4.0K May  4 11:44 Downloads
    drwxr-xr-x 21 francois francois  80K May  4 11:50 Documents
    drwxr-xr-x  9 francois francois 180K May  4 19:25 Pictures
    -rw-r--r--  1 francois francois   41 May  4 21:30 toto
    -rw-r--r--  1 francois francois    6 May  4 21:30 t.pid
    francois@h2g2:~$ cat t.pid
    24267
    francois@h2g2:~$ kill $(cat t.pid)
    francois@h2g2:~$ 
    [1]+  Terminated              sh toto
    francois@h2g2:~$ 
    francois@h2g2:~$ 
    francois@h2g2:~$


    pour bash ca marche

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2011
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 16
    Points : 12
    Points
    12
    Par défaut
    Merci pour ta réponse, mais en tapant exactement les memes commande que toi je n'ai pas le pid qui s'affiche avec ls, alors que j'ai exécuter le script pour sh.

  4. #4
    Modérateur
    Avatar de jlliagre
    Homme Profil pro
    Ingénieur support avancé & développement
    Inscrit en
    Juin 2007
    Messages
    2 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur support avancé & développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 695
    Points : 7 882
    Points
    7 882
    Par défaut
    Citation Envoyé par david633 Voir le message
    Conclusion comment faire pour arriver a stoper ce processus sans avoir cette erreur ?
    Dans ton script, tu ajoutes cette ligne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo $$ >/tmp/monscript.pid
    et quand tu veux l'arrêter:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    kill $(< /tmp/monscript.pid)
    ɹǝsn *sıɹɐlos*

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2011
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 16
    Points : 12
    Points
    12
    Par défaut
    Super merci ça marche !


    Par contre un détail, si je comprends la signification de $$ et le < a quoi servent vraiment les parenthèses ?

    Merci encore en tout cas

  6. #6
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 538
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 538
    Points : 19 360
    Points
    19 360
    Par défaut
    $(< fichier) est un bashisme, qui est un équivalent plus rapide (selon la documentation) de $(cat fichier).
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  7. #7
    Modérateur
    Avatar de jlliagre
    Homme Profil pro
    Ingénieur support avancé & développement
    Inscrit en
    Juin 2007
    Messages
    2 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur support avancé & développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 695
    Points : 7 882
    Points
    7 882
    Par défaut
    Citation Envoyé par david633 Voir le message
    Par contre un détail, si je comprends la signification de $$
    "$$" correspond au numéro de processus (PID) du shell courant, donc de ton script.

    et le < a quoi servent vraiment les parenthèses ?
    Il existe deux manières d'utiliser le résultat d'une commande dans une autre commande (en anglais: command substitution), l'ancienne méthode consiste à utiliser des backticks [`]. L'un des problèmes de cette syntaxe est qu'elle ne permet pas de distinguer le début de la fin d'une commande et aussi qu'il est compliqué d'imbriquer plusieurs "command substitutions" les unes dans les autres.

    Une nouvelle syntaxe a été introduite par ksh pour résoudre ces problèmes il y a une trentaine d'années et rapidement adoptée par le standard POSIX mais, bien qu'elle soit recommandée, elle a du mal à s'implanter.

    Elle consiste à remplacer le premier backtick par [ $( ] et le dernier par une parenthèse fermante [ ) ].

    et

    sont donc équivalents.

    Ksh a aussi introduit la possibilité de mettre uniquement une redirection en entrée comme "commande" mais POSIX n'a pas standardisé cette fonctionnalité qui évite d'exécuter la commande "cat" inutilement.

    Bash et probablement d'autres shells de type Bourne implémentent cette fonctionnalité qui n'est donc pas vraiment un bashisme, à la limite un kshisme...
    ɹǝsn *sıɹɐlos*

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

Discussions similaires

  1. Terminer proprement un processus avec kill
    Par rdtech dans le forum Bibliothèques, systèmes et outils
    Réponses: 5
    Dernier message: 17/09/2016, 20h07
  2. Quitter un processus avec un fenetre fille
    Par ludovic85 dans le forum Windows Forms
    Réponses: 4
    Dernier message: 19/02/2007, 13h29
  3. [Système] Utiliser exec() avec kill
    Par lepec dans le forum Langage
    Réponses: 9
    Dernier message: 24/01/2007, 19h53
  4. Réponses: 1
    Dernier message: 03/12/2006, 11h16
  5. Lancement de processus avec priorité
    Par GMI3 dans le forum Administration système
    Réponses: 2
    Dernier message: 14/06/2004, 17h43

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