Comment trouver l'ID de processus (PID) d'un programme en cours d'exécution?

88

Je lance un programme dans le terminal que je ne peux pas échapper avec Ctrl - C et que je veux tuer. Comment puis-je trouver son PID?

    
posée Jjed 25.08.2012 - 17:00
la source

8 réponses

104

Ouvrez un autre terminal et exécutez ps ax | grep foo où foo est le nom du programme qui ne répond pas. Cela devrait retourner une ligne de sortie qui ressemble à ceci:

$ ps ax | grep firefox
2222 ?        S      0:00 /bin/sh /usr/lib/firefox-3.6.9/firefox
2231 ?        Sl   514:36 /usr/lib/firefox-3.6.9/firefox-bin
30290 pts/2    S+     0:00 grep --color=auto firefox

Le premier champ de chaque ligne de sortie est un nombre qui représente l'ID de processus du programme correspondant à grep (vous pouvez ignorer en toute sécurité le dernier, qui représente grep lui-même.

Pour arrêter le processus incriminé, faites: kill pid où pid est l'ID de processus du programme. Vous devrez peut-être utiliser votre jugement pour savoir laquelle des correspondances doit être kill ed ou utiliser top à la place. Utiliser kill en lui-même envoie SIGTERM, que vous devriez essayer en premier car il permet au programme de se nettoyer correctement après lui-même. Si SIGTERM échoue, essayez SIGHUP, qui est un médicament plus puissant: kill -HUP pid . Si tout échoue, envoyez SIGKILL. Mais, vous ne devriez le faire qu'en dernier recours, car SIGKILL oblige le noyau à terminer le processus immédiatement sans possibilité de nettoyage. Cela peut parfois entraîner une corruption des données ou d'autres problèmes. Donc, encore une fois, envoyez SIGKILL en dernier recours. Pour ce faire, faites kill -KILL pid ou kill -9 pid .

Si vous utilisez une interface graphique, bien sûr, vous n’avez pas à vous tromper avec ce truc de ligne de commande fou pour faire le travail. Il suffit d'ouvrir "System Monitor", accédez à l'onglet Processus, choisissez le processus que vous souhaitez arrêter (Hm, pourrait-il s'agir de celui utilisant 90% de CPU?) Et cliquez dessus avec le bouton droit de la souris. Puisque le processus est déjà arrêté (c'est le problème, n'est-ce pas?), Choisissez Terminer le processus ou Supprimer le processus dans le menu résultant.

  

Crédit à koanhead

    
réponse donnée Jjed 13.04.2017 - 14:24
la source
33

Je ne pense pas qu'il y ait besoin de telles commandes si vous pouvez accomplir les mêmes commandes avec pgrep, pkill, pidof, etc.

  • Pour obtenir le pid d'un programme en cours d'exécution

pgrep:

   pgrep [options] pattern

DESCRIPTION:     pgrep examine les processus en cours d'exécution et répertorie les identifiants de processus qui correspondent aux critères de sélection à stdout. Tous les critères doivent correspondre. Par exemple,

  • Rechercher le processus nommé sshd appartenant à root.

    $ pgrep -u root sshd
    
  • Liste les processus appartenant à la racine OU au démon.

    $ pgrep -u root,daemon
    

pidof:

DESCRIPTION :

Pidof trouve les identifiants de processus (pids) des programmes nommés. Il imprime ces identifiants sur la sortie standard.

syntaxe:        pidof nom_programme

  • Pour tuer un programme en utilisant pid pkill exemple:

    pkill pid    
    pkill -f process_name    
    pkill -o process_name    
    pkill -n process_name    
    pkill -l process_name
    

    -f flag: recherche l'indicateur process_name (voir man pkill)
    -o flag: sélectionne uniquement le plus ancien des processus correspondants.
    -n flag: sélectionne uniquement le plus récent des processus correspondants.
    -l flag: liste le nom du processus ainsi que l'ID du processus.

réponse donnée Prabhat Kumar Singh 16.06.2014 - 11:07
la source
16

La manière la plus simple de connaître le pid d’un programme en cours d’exécution consiste à utiliser:

pidof <application name>

Par exemple, si vous avez lancé vim et que vous voulez connaître son pid:

pidof vim

N'oubliez pas que vous devrez fournir le nom exact du programme qui a été lancé.

Par exemple, si vous exécutez vi et exécutez pidof vim , vous n'obtiendrez pas de résultats corrects.

Reportez-vous à la page de manuel de pidof pour plus d'informations.

    
réponse donnée jobin 16.06.2014 - 11:28
la source
13

J'ai trouvé intéressant d’utiliser une recherche insensible à la casse en ajoutant le "-i" et en utilisant "aux" au lieu de "ax" pour obtenir un résultat plus descriptif:

ps aux | grep -i firefox

Si vous souhaitez supprimer tous les processus que vous pouvez utiliser:

ps aux | grep -i firefox | awk {'print '} | xargs kill -9

C'est une tuerie forcée. Déposez le "-9" si vous voulez un kill tendre.

    
réponse donnée John Foley 24.12.2013 - 17:45
la source
3

Si vous ne voulez que le pid (utile pour les scripts d'autokill, etc ...)

pgrep -f desired_program_name
    
réponse donnée MikeL 10.01.2017 - 14:29
la source
0

Vous pouvez également ouvrir un autre terminal (ou passer à un autre tty) et exécuter top , qui est essentiellement une version texte du Moniteur système. La première colonne indique le PID de chaque processus en cours, que vous pouvez supprimer en appuyant sur K , en entrant le PID, puis en entrant un signal numérique à envoyer.

    
réponse donnée Waldir Leoncio 16.06.2014 - 13:01
la source
0

Vous pourriez faire:

ps ax | grep firefox | cut -f2 -d" " - | xargs kill -9

Les deux premiers tuyaux reçoivent des informations sur le processus, ensuite nous essayons d’obtenir la colonne PID en utilisant la méthode old-school, puis nous donnons le PID résultant à tuer.

    
réponse donnée Arian Soltani 27.09.2016 - 23:09
la source
0

Pour ceux qui utilisent Ubuntu 16.04 LTS, vous devez utiliser ps ax et pas seulement ps sur la ligne de commande, sinon vous obtiendrez simplement les processus à partir de l'instance terminale particulière dans laquelle vous vous trouvez (généralement juste "bash" [le shell dans lequel vous êtes] et "ps" [ce que vous venez de lancer])

    
réponse donnée cygnus_x1 10.09.2017 - 16:30
la source

Lire d'autres questions sur les étiquettes