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 :

Tuer des processus via un script bash


Sujet :

Shell et commandes GNU

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2012
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 96
    Points : 72
    Points
    72
    Par défaut Tuer des processus via un script bash
    Bonjour à tous,

    dans un script shell je récupère les ID des processus que je veux "tuer", je les stock dans un fichier texte puis je boucle sur chacun d'entre eux avec la commande kill :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ps -ef | grep BDD_NAME | cut -f2 -d' ' > processes.tmp
     
    for line in $(cat processes.tmp); 
    do kill -9 $line ; 
    echo "process $line killed"
    done
    Le problème c'est que je ne peux lancer la commande kill sans obtenir "Operation not permitted". J'aimerai que mon script soit "autonome", et donc ne pas passer par "sudo" puis entrer le mot de passe manuellement. Il me semble peu sure de stocker un mot de passe dans un fichier, j'aimerai donc trouver un moyen de tuer mes processus sans avoir à m'identifier (si c'est réalisable biensûr).

    Merci à vous

  2. #2
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 269
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 269
    Points : 13 533
    Points
    13 533
    Par défaut
    1. Tu devrais utiliser pkill plutôt que ps, grep, cut
    2. Tu devrais mieux te renseigner sur sudo. C'est justement la méthode qui permettra d'exécuter ton tueur de processus sans te connecter à chaque fois en root.

  3. #3
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 721
    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 721
    Points : 31 044
    Points
    31 044
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par RTK45 Voir le message
    Bonjour à tous,
    Salut

    Citation Envoyé par RTK45 Voir le message
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    do kill -9 $line ;
    T'as pensé essayer au-moins un kill -15 avant d'envoyer le 9 ???

    Citation Envoyé par RTK45 Voir le message
    Le problème c'est que je ne peux lancer la commande kill sans obtenir "Operation not permitted".
    Ben oui. Tu imagines un système où tout le monde pourrait tuer les process de tout le monde ???

    Citation Envoyé par RTK45 Voir le message
    Il me semble peu sure de stocker un mot de passe dans un fichier
    Oui, ça limite en effet l'efficacité du mot de passe...

    Citation Envoyé par RTK45 Voir le message
    , j'aimerai donc trouver un moyen de tuer mes processus sans avoir à m'identifier (si c'est réalisable biensûr).
    sudo signifiant littéralement "faire sous le compte d'un autre"...

    Ou alors chmod u+s /bin/kill mais ça rendra de suite ton OS beaucoup moins sécurisé...

  4. #4
    Expert confirmé
    Avatar de becket
    Profil pro
    Informaticien multitâches
    Inscrit en
    Février 2005
    Messages
    2 854
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Informaticien multitâches
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 2 854
    Points : 5 915
    Points
    5 915
    Par défaut
    Il y a plus simple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    kill $( pidof BDD_NAME )
    ps : je ne connaissais pas pgrep / pkill

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2012
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 96
    Points : 72
    Points
    72
    Par défaut
    Bonjour,

    merci pour vos réponses, j'ai essayé vos différentes méthodes (), mais ça ne fonctionne pas. En fait le nom de la base de donnée que je chercher à "killer" n"apparait pas directement dans la colonne des processus :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    postgres  9106  1071  0 11:29 ?        00:00:00 postgres: user ma_base 125.0.0.1(52878) idle
    Je pourrai faire un pkill postgres mais j'aimerai préserver les processus qui ne sont pas concernés. C'est pourquoi je passe par , grâce à ca je peux récupérer uniquement la liste des processus qui concernent ma base de données, et pas tous les processus postgres.

    Je suis débutant en commandes Unix, peut être que j'ai loupé quelque chose

  6. #6
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 309
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 309
    Points : 12 815
    Points
    12 815
    Par défaut
    Bonjour,

    Tu dois pouvoir toutefois simplifier:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ps -ef | grep BDD_NAME | cut -f2 -d' ' | xargs kill -9

  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 842
    Points
    7 842
    Par défaut
    pgrep sait rechercher dans les arguments de la ligne de commande et se limiter à un compte utilisateur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pgrep -u postgres -f ma_base
    PS: Comme déjà répondu par Sve@r, éviter le "kill -9" sans raison. SIGKILL n'est à utiliser qu'en dernier ressort, quand un processus ne réponds pas aux signaux "normaux" (SIGINT, SIGTERM, ...)

Discussions similaires

  1. l'envoie des mails via un script asp
    Par aefmaaradji dans le forum ASP
    Réponses: 2
    Dernier message: 07/07/2010, 15h26
  2. [Free Pascal] [Mac OS X] Liste des processus via sysctl
    Par sinfoni dans le forum Free Pascal
    Réponses: 6
    Dernier message: 05/05/2010, 11h48
  3. Elévation des droits via un script
    Par Valère dans le forum Windows 2000/Me/98/95
    Réponses: 2
    Dernier message: 01/03/2010, 17h29
  4. [Gimp] Automatiser des tâches via un script.
    Par Zaltymbunk dans le forum Imagerie
    Réponses: 3
    Dernier message: 13/01/2009, 11h17
  5. Tuer des processus par leur nom
    Par tedparker dans le forum Access
    Réponses: 2
    Dernier message: 12/09/2006, 16h19

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