J'exécute un programme dans le terminal avec lequel je ne peux pas m'échapper Ctrl-C et que je veux tuer. Comment puis-je trouver son PID?
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 renvoyer une ligne de sortie qui ressemble à ceci:
$ ps ax | grep firefox2222 ? S 0:00 /bin/sh /usr/lib/firefox-3.6.9/firefox2231 ? Sl 514:36 /usr/lib/firefox-3.6.9/firefox-bin30290 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 mis en correspondance par 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 déterminer lequel des matchs doit être kill
ed, ou vous pourriez utiliser top
plutôt. Utiliser kill
par lui-même envoie SIGTERM, que vous devriez essayer d'abord car il 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 devriez le faire qu'en dernier recours, car SIGKILL provoque la fin immédiate du processus par le noyau 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
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. Ouvrez simplement "Moniteur système", accédez à l'onglet Processus, choisissez le processus que vous souhaitez arrêter (Hm, pourrait-il s'agir de celui utilisant 90% du processeur?) et faites un clic droit dessus. Puisque le processus est déjà arrêté, (c'est le problème, non?) choisissez Terminer le processus ou Tuer le processus 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 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 de stdout. Tous les critères doivent correspondre. Exemple,
-
Pour trouver le processus nommé sshd appartenant à root.
$ pgrep -u root sshd
-
Répertorier les processus appartenant à la racine OU au démon.
$ pgrep -u root,daemon
pidof:
DESCRIPTION:
Pidof trouve les ID de processus (PID) des programmes nommés. Il imprime ces identifiants sur la sortie standard.
syntaxe: nom_du_programme pidof
-
Pour tuer un programme par pid, utilisez pkillexample:
pkill pid pkill -f process_name pkill -o process_name pkill -n process_name pkill -l process_name
-f
flag: Recherche le process_name (voir man pkill)-o
indicateur: Sélectionnez uniquement le plus ancien des processus correspondants.-n
indicateur: Sélectionnez uniquement le plus récent des processus correspondants.-l
indicateur: Répertorie 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 consiste à utiliser:
pidof <application name>
Par exemple, si vous avez démarré vim et que vous souhaitez connaître son pid:
pidof vim
N'oubliez pas que vous devrez fournir le nom exact du programme qui a été démarré.
Par exemple, si vous exécutez vi et exécutez pidof vim
vous n'obtiendrez pas de résultats corrects.
Se référer à pidof
page de manuel pour plus d'informations.
J'ai trouvé qu'il est agréable 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 que vous pouvez utiliser:
ps aux | grep -i firefox | awk {'print $2'} | xargs kill -9
C'est une mise à mort forcée. Laissez tomber le " -9 " si vous voulez une mise à mort douce.
Si vous ne voulez que le pid (utile pour les scripts de remplissage automatique, etc...)
pgrep -f desired_program_name
Pour ceux qui exécutent Ubuntu 16.04 LTS, vous devoir utiliser ps ax
et pas seulement ps
sur la ligne de commande, sinon vous obtiendrez simplement les processus générés à partir de l'instance de terminal particulière dans laquelle vous vous trouvez. (généralement juste "bash" [le shell dans lequel vous vous trouvez] et " ps " [ce que vous venez de lancer])
Vous pouvez également ouvrir un autre terminal (ou passer à un autre ATS) et exécuter top
, qui est essentiellement une version texte du moniteur système. La première colonne répertorie le PID de chaque processus en cours, que vous pouvez tuer en appuyant sur K, en entrant le PID puis en entrant un signal numérique à envoyer.
Tu pourrais faire:
ps ax | grep firefox | cut -f2 -d" " - | xargs kill -9
les deux premiers tuyaux obtiennent des informations sur le processus, ensuite nous essayons d'obtenir la colonne PID en utilisant la coupe à l'ancienne, puis nous donnons le PID résultant à tuer.
top
ou
screen -list|ls
liste tous les pid avec le processus correspondant
kill -[pid]
Ceci est une branche de [Que dois-je faire quand Ubuntu se fige?] (performance - What should I do when Ubuntu freezes? - Ask Ubuntu) comme référence pour éviter que les détails de cette question ne deviennent trop techniques.
Il y a une commande pidof.