Aus meiner Frage ging hervor, dass ich die Funktionen eines Daemons nicht einfach bestimmen kann. Ich habe in verschiedenen Artikeln und in verschiedenen Foren gelesen, dass der service --status-all
Befehl zum Auflisten aller Daemons in meinem System verwendet werden kann. Ich glaube jedoch nicht, dass der Befehl alle Dämonen auflistet, da NetworkManager
ein Dämon, der derzeit in meinem Ubuntu 14.04
System ausgeführt wird, vom Befehl nicht aufgelistet wird. Gibt es einen Befehl, um die laufenden Daemons aufzulisten, oder gibt es eine Möglichkeit, die Daemons von filesystem
sich aus zu finden ?
32
network-manager
nicht istNetworkManager
.anacron
was in seinem Init-Skript als kein Dämon erwähnt wird.anacron
weil gesagt wurde,/etc/init.d/anacron
dass es kein Daemon ist. Mein Ziel ist es, einC++
Programm zu schreiben , um alle auf meinem System laufenden Daemons aufzulisten. Dafür muss ich wissen, welche Dateien zu analysieren sind, um die Details zu erhalten.service --status-all
ist dies das , was Sie brauchen. Ubuntu scheint NetworkManager anders zu behandeln. Ich bekomme beidesnetworking
undnetwork-manager
in der Ausgabe vonservices --status-all
auf Debian aber nurnetworking
auf Ubuntu. Ich denke, Sie müssen definieren, was genau Sie mit "Daemon" meinen.Antworten:
Der Begriff Daemon wird an Prozesse angehängt , nicht an Dateien . Aus diesem Grund macht es keinen Sinn, "Daemons im Dateisystem zu finden". Nur um den Begriff etwas klarer zu machen: Ein Programm ist eine ausführbare Datei (sichtbar in der Ausgabe von
ls
); Ein Prozess ist eine Instanz dieses Programms (sichtbar in der Ausgabe vonps
).Wenn wir nun die Informationen verwenden, die ich in meiner Antwort angegeben habe , können wir laufende Daemons finden, indem wir nach Prozessen suchen, die ohne ein daran angeschlossenes Controlling-Terminal ausgeführt werden . Das geht ganz einfach mit
ps
:Das
tty
Ausgabefeld enthält "?" wenn der Prozess kein steuerndes Terminal hat.Das große Problem tritt hier auf, wenn auf Ihrem System eine grafische Umgebung ausgeführt wird. Da GUI-Programme (z. B. Chromium) keinem Terminal zugeordnet sind, werden sie auch in der Ausgabe angezeigt. In einem Standardsystem, in dem root keine Grafikprogramme ausführt, können Sie die vorherige Liste einfach auf die Prozesse von root beschränken. Dies kann mit
ps
dem-U
Schalter ' erreicht werden .Dabei treten jedoch zwei Probleme auf:
Grundsätzlich möchten wir alle Programme ohne steuerndes Terminal anzeigen, jedoch keine GUI-Programme . Zum Glück gibt es ein Programm zum Auflisten von GUI-Prozessen
xlsclients
:! Diese Antwort von slm zeigt uns, wie wir damit alle GUI-Programme auflisten können. Wir müssen sie jedoch umkehren, da wir sie ausschließen möchten. Dies kann mit dem--deselect
Schalter erfolgen.Zunächst erstellen wir eine Liste aller GUI-Programme, für die Prozesse ausgeführt werden. Nach der Antwort, die ich gerade verlinkt habe, geschieht dies mit ...
Hat jetzt
ps
einen-C
Schalter, mit dem wir nach Befehlsnamen auswählen können. Wir haben gerade unsere Befehlsliste bekommen, also lasst sie uns in dieps
Befehlszeile einfügen. Beachten Sie, dass ich--deselect
danach verwende, um meine Auswahl umzukehren.Jetzt haben wir eine Liste aller Nicht-GUI-Prozesse. Vergessen wir nicht unsere "no TTY attached" Regel. Dazu werde ich
-o tty,args
die vorherige Zeile ergänzen , um den Werttty
jedes Prozesses (und dessen vollständige Befehlszeile) auszugeben :Das Finale
grep
fängt alle Zeilen ein, die mit "?" Beginnen, dh alle Prozesse ohne Kontroll-Tty. Und los geht's! Diese letzte Zeile enthält alle Nicht-GUI-Prozesse, die ohne steuerndes Terminal ausgeführt werden. Beachten Sie, dass Sie es noch verbessern können, indem Sie beispielsweise Kernel-Threads ausschließen (die keine Prozesse sind) ...... oder indem Sie ein paar Spalten mit Informationen hinzufügen, die Sie lesen können:
quelle
Ich habe für das "alte" sysv initd geschrieben, du musst prüfen, ob es auf deiner Distribution funktioniert.
Gute Dämonen haben in / etc / initd gut geschriebene Startskripte
Woher kennt init beim Ändern des Runlevels die laufenden Daemons?
Es sucht nach ihren Namen im Verzeichnis
Also kannst du
So scannen Sie alle Prozesse: Listen Sie jedes Unterverzeichnis in auf
Wenn es sich bei dem Namen um Ziffern handelt, ist dies die PID eines laufenden Prozesses.
Der Status des Prozesses mit PID 1234 ist beispielsweise diese Datei
Öffne es und erhalte die erste Zeile, beginnend mit "Name:"
Sehen
(Entschuldigung für die üble Formatierung, ich schreibe von meinem Handy ...)
quelle