web-dev-qa-db-fra.com

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

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

Fermer ce terminal? Un processus est toujours en cours d'exécution dans ce terminal. Fermer le terminal va le tuer.

Comment puis-je savoir ce qui fonctionne encore? Notez qu'il n'y a rien dans la sortie de jobsname__. Merci.

10
Tim
ps T

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

11
tmcp

Si vous avez démarré un processus dans un 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 identiques. Ceci peut être vu dans la sortie de

ps -ef

commander. Pour le rendre plus lisible, commençons par "canaliser" la sortie vers grep pour trouver le PID de tous les processus "bash" en cours d'exécution et ensuite "rediriger" vers awk. awk sé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 allez l'utiliser 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 ce terminal-sessions, nous pouvons utiliser cette commande:

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

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

La dernière commande ne fait que regarder la sortie de ps -ef et recherche si le PID (que vous avez trouvé dans la commande précédente) et le PPID sont identiques pour tous les processus.

Plus d'informations:

homme ps

homme awk

1
NonStandardModel

Vous pouvez avoir un aperçu des processus qui répertorient le PID de votre Shell en tant que parent. Comme vous le savez peut-être ou non, nous pouvons spécifier le format ps

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

Ici, nous obtenons le PID du shell de la variable spéciale $$ dans SHELLPID, qui peut ensuite être utilisé par awk dans le sous-shell du tuyau. Essentiellement, nous ne faisons que répertorier les processus dans le formulaire NOM, le PID, le PID parent et filtrons uniquement ceux qui ont le PID approprié dans la dernière colonne.

1