Ich habe versucht, bei Google nachzuschauen, konnte jedoch nicht viele Informationen zu der eigentlichen Frage finden.
Wie erhalte ich eine konsolidierte Liste von Zombie-Prozessen und Daemon-Prozessen? Wie mache ich das auf verschiedenen Betriebssystemen? Linux? AIX? Windows?
Ich bin mir sicher, dass wir auf Grundlage der PID die Art des Prozesses nicht identifizieren können. Das Durchlaufen eines Terminals kann auch nicht helfen.
Probieren Sie das aus.
ps axo pid,ppid,pgrp,tty,tpgid,sess,comm |awk '$2==1' |awk '$1==$3'
Im obigen Befehl habe ich die Eigenschaften eines Daemons verwendet, um sie aus allen vorhandenen Prozessen in Linux herauszufiltern.
Das übergeordnete Element eines Daemons ist immer Init, also prüfen Sie, ob ppid 1 ..__ vorhanden ist. Der Daemon ist normalerweise keinem Terminal zugeordnet, daher haben wir '?' Unter tty . Die Prozess-ID und die Prozessgruppen-ID eines Daemons sind normalerweise die gleichen Die Sitzungs-ID eines Daemons ist mit der Prozess-ID identisch.
Mit GNU ps unter Linux:
[
$ ps --version
procps-ng version 3.3.3
]
Zombies:
ps -lA | grep '^. Z'
erhalten Sie alle Zombies (beachten Sie, dass der Parameter in Kleinbuchstaben 'L' ist, d. h. 'l' gefolgt von 'A').
Daemons:
Wie @Barmar sagte, gibt es keine Möglichkeit, Dämonen sicher zu bekommen, aber ein Hinweis darauf, dass ein Prozess ein Dämon ist, ist, dass er keinem TTY-Gerät zugeordnet ist. Die 12. Spalte der Ausgabe "ps -Al" ist TTY. Die 4. ist PID, 14. ist der Prozessname. Daher:
ps -lA | awk '$12 == "?" {print $4, $14}'
erhalten Sie Prozesse, die möglicherweise Daemons sind; nicht garantiert! :)
Daemons werden vom init-Prozess gestartet, das heißt, sie haben eine PPID von 1.
Deshalb:
ps -ef | awk '$3 == 1'
Um die Liste der Zombie- und Daemon-Prozesse abzurufen, schreiben Sie einfach einen Pseudo-Zeichen-Dev-Treiber, in dem Sie durch task_struct navigieren und nach dem Status suchen müssen
Ich habe für Daemons und die "alte" Sysv-Initd geschrieben, Sie müssen überprüfen, ob es an Ihrer Distribution funktioniert.
Gute Dämonen haben gut geschriebene Startskripte in/etc/initd geschrieben
Wie kennt init die laufenden Daemons beim Ändern des Runlevels?
Es sucht nach ihren Namen im Verzeichnis
/ var/lock/subsys
Also kannst du
holen Sie sich die Namensliste von dort
scannen Sie alle laufenden Prozesse und prüfen Sie, ob der Name in der Liste enthalten ist: Bingo!
So scannen Sie alle Prozesse: Listen Sie jedes Unterverzeichnis in auf
/ proc
Wenn der Name aus Ziffern besteht, ist dies die PID eines laufenden Prozesses.
Der Status des Prozesses mit pid 1234 ist beispielsweise diese Datei
/ proc/1234/status
Öffne es und bekomme die erste Zeile, beginnt mit "Name:"
Sehen
http://man7.org/linux/man-pages/man5/proc.5.html
https://linuxexplore.com/2014/03/19/use-of-subsystem-lock-files-in-init-script/
(Entschuldigung für die unangenehmen Formatierungen, ich schreibe von meinem Handy aus ...)