web-dev-qa-db-fra.com

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

Je lance 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?

109
Jjed

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 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 représentant l'ID de processus du programme correspondant à grep(vous pouvez ignorer en toute sécurité le dernier, qui représente grepname__.

Pour arrêter le processus incriminé, procédez comme suit: kill pid où pid est l'ID de processus du programme. Vous devrez peut-être décider laquelle des correspondances doit être killname__ed, ou vous pouvez utiliser topà la place. L'utilisation de killpar lui-même envoie SIGTERM, que vous devez d'abord essayer car cela 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. Cependant, vous ne devez le faire qu'en dernier recours, car SIGKILL force le noyau à mettre immédiatement fin au processus, sans possibilité de nettoyage. Cela peut parfois entraîner une corruption des données ou d'autres problèmes. Encore une fois, n'envoyez que SIGKILL en dernier recours. Pour ce faire, utilisez kill -KILL pid ou kill -9 pid.

Si vous utilisez une interface graphique, bien sûr, vous n'avez pas à vous tromper avec ce genre de choses folles en ligne de commande pour faire le travail. Il suffit d’ouvrir "Moniteur système", d’accéder à l’onglet Processus, de choisir le processus à arrêter (Hm, s’agit-il du processus utilisant 90% de l’UC?) Et de cliquer dessus avec le bouton droit de la souris. Puisque le processus est déjà arrêté, (c'est le problème, non?), Choisissez Terminer le processus ou Supprimer le processus dans le menu qui apparaît.

Crédit à koanhead

124
Jjed

Je ne pense pas que des commandes aussi longues soient nécessaires lorsque vous pouvez exécuter les mêmes commandes avec pgrep, pkill, pidof, etc.

  • Obtenir le pid d'un programme en cours

pgrep:

   pgrep [options] pattern

DESCRIPTION: pgrep examine les processus en cours et répertorie les ID de processus correspondant aux critères de sélection de stdout. Tous les critères doivent correspondre. Par exemple,

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

    $ pgrep -u root sshd
    
  • Répertoriez les processus appartenant au démon racine OR.

    $ 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 par pid, utilisez l'exemple pkill:

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

    -f flag: recherche le nom du processus (voir man pkill)
    -o flag: sélectionnez uniquement le plus ancien des processus correspondants.
    -n flag: sélectionnez uniquement le plus récent des processus correspondants.
    -l flag: Répertorie le nom du processus ainsi que son ID.

46

Le moyen le plus simple de connaître le pid d'un programme en cours consiste à utiliser:

pidof <application name>

Par exemple, si vous avez démarré vim et 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.

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

18
jobin

J'ai trouvé agréable d'utiliser une recherche insensible à la casse en ajoutant "-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 $2'} | xargs kill -9

C'est un coup puissant. Lâchez le "-9" si vous voulez une tuerie douce.

15
John Foley

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

pgrep -f desired_program_name
3
MikeL
top

ou

screen -list|ls

liste tous les pid avec le processus correspondant

kill -[pid]
0
Rakly3

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 coupe old-school, puis nous donnons le PID résultant à tuer.

0
Arian Soltani

Pour ceux qui exécutent Ubuntu 16.04 LTS, , vous devez utiliser ps ax et pas seulement ps à 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 d'exécuter])

0
cygnus_x1

Vous pouvez également ouvrir un autre terminal (ou passer à un autre terminal) 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 supprimer en appuyant sur K, en entrant le PID puis en entrant un signal numérique à envoyer.

0
Waldir Leoncio