162 votes

Comment trouver le Process ID (PID) d'un programme terminal en cours d'exécution ?

Je suis en train d'exécuter 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 ?

170voto

Jjed Points 13254

Ouvrez un autre terminal et exécutez ps ax | grep foo où foo est le nom du programme qui ne répond pas. Ceci devrait retourner une ligne de sortie qui ressemble à quelque chose comme 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'identifiant du processus du programme correspondant à l'option grep (vous pouvez sans risque ignorer le dernier, qui représente grep lui-même.

Pour arrêter le processus incriminé, faites : kill pid où pid est l'ID du processus du programme. Vous devrez peut-être faire preuve de discernement pour déterminer laquelle des correspondances doit être kill ou vous pouvez utiliser top à la place. Utilisation de kill par lui-même envoie SIGTERM, ce que vous devriez essayer d'abord car cela permet au programme de nettoyer correctement après lui-même. Si SIGTERM échoue, essayez SIGHUP, qui est un médicament plus puissant : kill -HUP pid . Si tout le reste échoue, envoyez SIGKILL. Mais vous ne devez le faire qu'en dernier recours, car SIGKILL amène 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, n'envoyez SIGKILL qu'en dernier recours. Pour ce faire, faites kill -KILL pid o kill -9 pid .

Si vous utilisez une interface graphique, vous n'avez bien sûr pas besoin d'utiliser cette ligne de commande pour faire le travail. Il suffit d'ouvrir "System Monitor", de naviguer dans l'onglet Processes, de choisir le processus que vous voulez arrêter (Hm, ne serait-ce pas celui qui utilise 90% du CPU ?) et de faire un clic droit dessus. Puisque le processus est déjà arrêté, (c'est le problème, non ?) choisissez End Process ou Kill Process dans le menu résultant.

Crédit à tête de koan

71voto

Je ne pense pas qu'il y ait besoin de commandes aussi longues quand on peut 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 liste les ID des processus qui correspondent aux critères de sélection dans la sortie standard. Tous les critères doivent correspondre. Par exemple,

  • Pour trouver le processus nommé sshd appartenant à root.

    $ pgrep -u root sshd
  • Liste des processus appartenant à l'utilisateur root ou au démon.

    $ pgrep -u root,daemon

pidof :

DESCRIPTION :

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

la syntaxe : pidof nom_du_programme

  • Pour tuer un programme par pid, utilisez pkill exemple :

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

    -f drapeau : Recherche le nom_du_processus (voir man pkill)
    -o drapeau : Sélectionner uniquement le plus ancien des processus correspondants.
    -n drapeau : Sélectionnez uniquement le plus récent des processus de correspondance.
    -l drapeau : Lister le nom du processus ainsi que l'ID du processus.

29voto

jobin Points 25504

Le moyen le plus simple de connaître le pid d'un programme en cours d'exécution est d'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 utilisez vi et exécutez pidof vim vous n'obtiendrez pas de résultats corrects.

Se référer à pidof Pour plus d'informations, consultez la page de manuel de la Commission européenne.

27voto

John Foley Points 461

J'ai découvert qu'il est intéressant d'utiliser une recherche insensible à la casse en ajoutant le "-i" et en utilisant "aux" au lieu de "ax" pour obtenir une sortie plus descriptive :

ps aux | grep -i firefox

Si vous souhaitez tuer tous les processus, vous pouvez utiliser :

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

C'est une mise à mort énergique. Laissez tomber le "-9" si vous voulez une mise à mort douce.

8voto

MikeL Points 181

Si vous voulez seulement le pid (utile pour autokill scripts, etc...)

pgrep -f desired_program_name

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X