web-dev-qa-db-fra.com

Linux: Comment trouver la liste des processus démons et des processus zombies

J'ai essayé de vérifier sur Google, mais je n'ai pas trouvé beaucoup d'informations relatives à la question. 

Comment obtenir une liste consolidée de processus zombie et de processus démons? Comment le faire sur différents systèmes d'exploitation. Linux? AIX? Les fenêtres?

Je suis sûr que, sur la base du PID, nous ne pouvons pas identifier le type de processus. Courir à travers un terminal pourrait ne pas aider non plus.

14
kris123456

Essayez ceci.

ps axo pid,ppid,pgrp,tty,tpgid,sess,comm |awk '$2==1' |awk '$1==$3'

Dans la commande ci-dessus, j'ai utilisé les propriétés mêmes d'un démon pour les filtrer, de tous les processus existants sous Linux.

Le parent d'un démon est toujours Init, alors vérifiez la valeur de ppid 1 . Le démon n'est normalement associé à aucun terminal. d'un démon sont normalement les mêmes L'identifiant de session d'un démon est identique à l'identifiant de processus.

15
madala

Avec GNU ps sur Linux:

$ ps --version

procps-ng version 3.3.3

]

Des morts-vivants:

ps -lA | grep '^. Z'

vous obtiendrez tous les zombies (notez que le paramètre est minuscule 'L', c'est-à-dire 'l' suivi de 'A').

Daemons:

Comme @Barmar l'a dit, il est impossible d'obtenir des démons avec certitude, mais un processus est un démon, c'est qu'il n'est associé à aucun périphérique TTY. La douzième colonne de la sortie 'ps -Al' est TTY; le 4 est PID, 14 est le nom du processus. Par conséquent:

ps -lA | awk '$12 == "?" {print $4, $14}'

vous obtiendrez des processus qui sont éventuellement daemons; pas garantie! :)

10
kaiwan

Les démons sont lancés par le processus init, ce qui signifie qu'ils ont un PPID de 1.

Donc:

ps -ef | awk '$3 == 1'
2
Ann B

Pour obtenir la liste des processus Zombie et Daemon, écrivez simplement un pilote de dev pseudo-caractère, dans lequel vous devriez naviguer à travers la structure task_struct et rechercher l'état.

1
user2623122

J'ai écrit pour les démons et le "vieux" sysv initd, vous devez vérifier si cela fonctionne sur votre distribution.

Les bons démons ont bien écrit les scripts de démarrage dans/etc/initd

Lors du changement de niveau d'exécution, comment init connaît-il les démons en cours d'exécution?

Il cherche leurs noms dans le répertoire

/ var/lock/subsys

Afin que vous puissiez

obtenir la liste des noms à partir de là

analyser tous les processus en cours et vérifier si le nom est dans la liste: bingo!

Pour analyser tous les processus: listez chaque sous-répertoire dans

/ proc

Si son nom est digits, il s'agit du pid d'un processus en cours d'exécution.

Par exemple, l’état du processus avec le pid 1234 est ce fichier

/ proc/1234/status

Ouvrez-le et obtenez la première ligne, commence par "Nom:"

Voir

http://man7.org/linux/man-pages/man5/proc.5.html

https://linuxexplore.com/2014/03/19/use-of-subsystem-lock-files-in-init-script/

(désolé pour le formatage méchant, j'écris depuis mon téléphone portable ...)

0
Massimo