Comment trouver des processus encore en cours d'exécution dans un terminal?


12

Lorsque j'essaie de fermer un onglet dans Gnome Terminal, il dit:

Fermer ce terminal? Un processus est toujours en cours d'exécution sur ce terminal. La fermeture du terminal le tuera.

Comment savoir ce qui fonctionne toujours? Notez qu'il n'y a rien dans la sortie de jobs. Merci.


1
Si vous êtes à l'invite du shell pendant que ce message est affiché, il s'agit probablement d'un shell imbriqué (pas celui directement démarré par l'émulateur de terminal). Peut - être que vous avez commencé un screen, tmux, script, ssh, mcet tourné les panneaux hors, ou tout simplement une autre coquille par exemple taper bash, ou quelque chose dans ce sens. Appuyez sur Ctrl + D ou tapez exitpour quitter votre shell, vous verrez où vous vous retrouvez.
egmont

Merci. après exit, l'onglet du terminal gnome ne se ferme pas.
Tim

1
Une seconde le exitfermera probablement alors. @egmont pouvez-vous déplacer ceci vers une réponse s'il vous plaît.
Videonauth

Réponses:


12
ps T

Sélectionne tous les processus associés au terminal.


Bon, bien que cela puisse être un peu trompeur. Les processus générés via la nohupcommande sont déconnectés du terminal, ne bloquez donc pas sa fermeture. Mais ils sont toujours répertoriés avec cette commande.
Sergiy Kolodyazhnyy

Ou juste ps d'ailleurs
user10089632

1

Vous pouvez prendre un aperçu des processus qui répertorient le PID de votre shell en tant que parent. Comme vous le savez ou non, nous pouvons spécifier le psformat

SHELLPID=$$ ; ps -e  -o cmd,pid,ppid | awk -v shell=$SHELLPID  '$NF~shell'   

Ici, nous obtenons le PID du shell à partir de la variable spéciale $$dans SHELLPID, qui peut ensuite être utilisé par awk dans le sous-shell de pipe. Essentiellement, nous listons simplement les processus sous la forme NAME, PID, Parent PID et filtrons uniquement ceux qui ont le PID approprié dans la dernière colonne.


1

Si vous avez démarré un processus dans le terminal (par exemple, gedit), l'ID de processus (PID) (de bash) et l'ID de processus parent (PPID) (de gedit) pour ces deux processus seront les mêmes. Cela peut être vu dans la sortie de

ps -ef

commander. Pour le rendre plus lisible, nous allons tout d'abord "diriger" la sortie vers greppour trouver le PID de tous les processus "bash" en cours d'exécution et ensuite la "rediriger" vers awk. Le awksélectionne uniquement les champs PID et nom du processus (champs 2 et 8) et les affiche à l'écran.

ps -ef | grep bash | awk '{print $2 ": " $8}'

Le nombre dans la sortie est PID. Vous l'utiliserez pour trouver quel processus a été démarré dans le terminal qui a ce PID. Notez qu'il peut y avoir plusieurs lignes de sortie si plusieurs terminaux sont ouverts. Maintenant, pour trouver les processus "enfants" (le cas échéant) de ces sessions terminales, nous pouvons utiliser cette commande:

ps -ef | awk '{if ($3 == EnterPID) print $2 ": " $8;}'

Vous devez entrer le numéro PID à la place d'EnterPID dans la dernière commande. S'il y a plus d'un PID pour "bash", vous devez tous les essayer.

La dernière commande regarde simplement la sortie de ps -efet recherche si PID (que vous avez trouvé à partir de la commande précédente) et PPID sont les mêmes pour n'importe quel processus.

Plus d'informations:

homme ps

homme awk


-1

Vous pouvez utiliser htop. Dans Ubuntu 16.04 (et supérieur), vous pouvez l'installer simplement en tapant sudo apt-get install htop.

Vous pouvez également utiliser top.


Et comment identifieriez-vous les processus dans le terminal actuel htop?
muru
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.