Jak wyświetlić listę wszystkich uruchomionych demonów?

32

Z mojego pytania było jasne, że nie mogę łatwo zdecydować o funkcjach demona. Przeczytałem w różnych artykułach i na różnych forach, za pomocą tego service --status-allpolecenia można wyświetlić listę wszystkich demonów w moim systemie. Ale nie sądzę, że polecenie wyświetla listę wszystkich demonów, ponieważ NetworkManagerdemon, który jest obecnie uruchomiony w moim Ubuntu 14.04systemie, nie jest wymieniony przez polecenie. Czy jest jakieś polecenie, aby wyświetlić listę uruchomionych demonów, czy też jest jakiś sposób, aby znaleźć demony od filesystemsiebie?

Jackzz
źródło
Czy na pewno nie ma go na liście? Jak się sprawdzasz? Widzę to na moim Debianie. Pamiętaj, że nazwa to network-managernie NetworkManager.
terdon
Tak. Jestem pewien. Nic nie jest związane z terminem sieć. Zawiera także listę, anacronktóra w skrypcie inicjującym nie jest demonem.
Jackzz,
Anacron nie będąc demonem jest bardziej kwestią semantyki, ponieważ nie jest uruchamiany w sposób ciągły. Nadal działa jako usługa, którą zwykle nazywamy demonami. Proszę edytować swoje pytanie i ja) mówią nam, które są uruchomione Ubuntu oraz ii) co dokładnie masz na myśli przez „demona”. Jaki jest twój ostateczny cel tutaj?
terdon
Podejrzewam, że każda usługa działająca w tle jest demonem. Wspomniałem, anacronponieważ powiedziano, /etc/init.d/anacronże nie jest to demon. Moim celem jest napisanie C++programu zawierającego listę wszystkich demonów działających w moim systemie. W tym celu muszę wiedzieć, które pliki przeanalizować, aby uzyskać szczegółowe informacje.
Jackzz,
1
Cóż, jeśli zdefiniujesz demony jako usługi, service --status-allpotrzebujesz tego. Ubuntu wydaje się traktować NetworkManager inaczej. Mam oba networkingi network-managerpo wyjściu services --status-allna Debianie, ale tylko networkingna Ubuntu. Myślę, że musisz zdefiniować, co dokładnie rozumiesz przez „demona”.
terdon

Odpowiedzi:

52

Pojęcie demona jest dołączone do procesów , a nie plików . Z tego powodu nie ma sensu „znajdowanie demonów w systemie plików”. Po prostu, aby pojęcie było nieco jaśniejsze: program jest plikiem wykonywalnym (widocznym na wyjściu ls); proces jest instancją tego programu (widoczną na wyjściu ps).

Teraz, jeśli wykorzystamy informacje, które podałem w mojej odpowiedzi , moglibyśmy znaleźć uruchomione demony, wyszukując procesy, które działają bez podłączonego do nich terminala sterującego . Można to zrobić dość łatwo za pomocą ps:

$ ps -eo 'tty,pid,comm' | grep ^?

Pole ttywyjściowe zawiera „?” gdy proces nie ma terminala sterującego.

Duży problem pojawia się, gdy system działa w środowisku graficznym. Ponieważ programy GUI (tj. Chromium) nie są podłączone do terminala, pojawiają się również na wyjściu. W standardowym systemie, w którym root nie uruchamia programów graficznych, możesz po prostu ograniczyć poprzednią listę do procesów roota. Można to osiągnąć za pomocą ps" -Uprzełącznika.

$ ps -U0 -o 'tty,pid,comm' | grep ^?

Jednak pojawiają się tutaj dwa problemy:

  • Jeśli root uruchamia programy graficzne, pojawią się.
  • Demony działające bez uprawnień roota nie. Zauważ, że demony, które zaczynają się w czasie uruchamiania, zwykle działają jako root.

Zasadniczo chcielibyśmy wyświetlać wszystkie programy bez terminala sterującego, ale nie programy GUI . Na szczęście dla nas, istnieje program do procesów lista GUI: xlsclients! Ta odpowiedź od slm mówi nam, jak używać jej do wyświetlania listy wszystkich programów GUI, ale będziemy musieli ją cofnąć, ponieważ chcemy je wykluczyć. Można to zrobić za pomocą --deselectprzełącznika.

Najpierw zbudujemy listę wszystkich programów GUI, dla których mamy uruchomione procesy. Z odpowiedzi, którą właśnie podłączyłem, odbywa się to za pomocą ...

$ xlsclients | cut -d' ' -f3 | paste - -s -d ','

Teraz psma -Cprzełącznik, który pozwala nam wybierać według nazwy polecenia. Właśnie dostaliśmy naszą listę poleceń, więc wstawmy ją do pslinii poleceń. Zauważ, że --deselectpóźniej używam do cofnięcia wyboru.

$ ps -C "$(xlsclients | cut -d' ' -f3 | paste - -s -d ',')" --deselect

Teraz mamy listę wszystkich procesów niezwiązanych z GUI. Nie zapominajmy o naszej zasadzie „bez dołączenia TTY”. W tym -o tty,argscelu dodam do poprzedniego wiersza, aby wyświetlić dane wyjściowe ttykażdego procesu (i jego pełnego wiersza poleceń):

$ ps -C "$(xlsclients | cut -d' ' -f3 | paste - -s -d ',')" --deselect -o tty,args | grep ^?

Finał grepprzechwytuje wszystkie linie zaczynające się od „?”, To znaczy wszystkie procesy bez kontrolnego tty. I proszę bardzo! Ten ostatni wiersz zawiera wszystkie procesy inne niż GUI uruchomione bez terminala sterującego. Pamiętaj, że nadal możesz to ulepszyć, na przykład, wykluczając wątki jądra (które nie są procesami) ...

$ ps -C "$(xlsclients | cut -d' ' -f3 | paste - -s -d ',')" --ppid 2 --pid 2 --deselect -o tty,args | grep ^?

... lub dodając kilka kolumn informacji do przeczytania:

$ ps -C "$(xlsclients | cut -d' ' -f3 | paste - -s -d ',')" --ppid 2 --pid 2 --deselect -o tty,uid,pid,ppid,args | grep ^?
John WH Smith
źródło
linux przechowuje wiele informacji na temat wirtualnego systemu plików, procfs. więc możliwe jest „znalezienie demonów w systemie plików” !!!
Massimo,
0

Napisałem dla „old” sysv initd, musisz sprawdzić, czy działa on na twojej dystrybucji.

Dobre demony mają dobrze napisane skrypty startowe w / etc / initd

Kiedy zmieniając poziom działania, w jaki sposób init zna uruchomione demony?

Poszukuje ich nazw w katalogu

/ var / lock / subsys

Więc możesz

pobierz stąd listę nazwisk

zeskanuj wszystkie uruchomione procesy i sprawdź, czy nazwa znajduje się na liście: bingo!

Aby przeskanować wszystkie procesy: wyświetl listę wszystkich podkatalogów w

/ proc

Jeśli jego nazwa to cyfry, jest to pid uruchomionego procesu.

Na przykład stanem procesu z pid 1234 jest ten plik

/ proc / 1234 / status

Otwórz i uzyskaj pierwszy wiersz, zaczyna się od „Nazwa:”

Widzieć

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

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

(przepraszam za nieprzyjemne formatowanie, piszę z telefonu komórkowego ...)

Massimo
źródło