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 ?
Réponses
Trop de publicités?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
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.
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.
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.
- Réponses précédentes
- Plus de réponses