Neue Prozesse erkennen und steuern

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
droptix
Beiträge: 140
Registriert: 26.07.2004 01:27:43

Neue Prozesse erkennen und steuern

Beitrag von droptix » 18.03.2008 08:18:04

Ich kenne mich unter Unix nicht so gut mit Prozessen aus, möchte aber ein plattformübergreifendes Tool bauen, das neu erstellte Prozesse erkennt und steuern (einfrieren (suspend), auftauen (resume) und beenden (terminate/kill)) kann. Daher wollte ich bei euch mal einsteigen und fragen, wie folgendes bei Debian möglich wäre:

Irgendjemand startet einen neuen Prozess. Nun stelle ich mir das so vor, dass das Betriebssystem davon benachrichtigt wird, dann sowas wie einen leeren Prozess-Container erzeugt (Speicher reserviert usw.) und den Prozess dort drin startet. Vielleicht könnte mir jemand kurz erklären, wie das im Gegensatz zu meinen Vorstellungen wirklich abläuft oder jemand hat nen guten Link zum Nachlesen?

Bei Windows ist das jedenfalls so, dass irgendwelche "Events" gesendet werden, wenn ein neuer Prozess gestartet wird. Das gibt's einmal auf Kernelebene, das kann man aber auch über WMI abfragen. Man erhält ein Objekt namens Win32_Process zurück, das sämtliche Infos über den Prozess enthält und an das bestimmte Funktionen wie z.B. Terminate() zum Beenden gebunden sind. Über das Prozess-Handle kann ich den Prozess auch einfrieren und auftauen.

Hat jemand Ideen, wie ich mich unter Unix dort rantasten kann?

C167
Beiträge: 468
Registriert: 06.04.2006 08:55:20
Lizenz eigener Beiträge: MIT Lizenz
Kontaktdaten:

Beitrag von C167 » 19.03.2008 13:18:48

kann sein dass ich danebenliege, aber trotzdem: Meines Wissens bekommt jeder Prozess in /proc ein eigenes (virtuelles) Verzeichnis

Code: Alles auswählen

dr-xr-xr-x   6 uml-net    uml-net       0 19. Mär 09:56 3955
dr-xr-xr-x   6 root       root          0 19. Mär 09:56 3960
dr-xr-xr-x   6 stefan     stefan        0 19. Mär 09:56 3988
dr-xr-xr-x   6 gkrellmd   root          0 19. Mär 09:56 3995
dr-xr-xr-x   6 root       root          0 19. Mär 09:56 4
dr-xr-xr-x   6 ntp        ntp           0 19. Mär 09:56 4007
dr-xr-xr-x   6 avahi      avahi         0 19. Mär 09:56 4017
. Wenn man nun regelmaessig die Liste der Verzeichnisse prueft und jedesmal schaut, welche hinzugekommen sind, hat man die Prozessnummer. Je nach Polling-Frequenz gehen einem da aber die kurzen durch die Lappen, beispielsweise logrotate-Prozesse die mal eben schauen ob eine kleine Logdatei verschoben werden muss. Wie man sehen kann, sieht man auch den Benutzer, der den Prozess gestartet hat und aknn somit natuerlich auch filtern.

Eine andere Moeglichkeit, bei der ich mich wirklich auf garnix festlegen will, ist sysctl, Dokumentation unter /usr/src/linux-source-<version>/Documentation/sysctl.
Dass es eine Schnittstelle gibt bin ich mir relativ sicher ;)
HTH
C167

droptix
Beiträge: 140
Registriert: 26.07.2004 01:27:43

Beitrag von droptix » 19.03.2008 13:22:10

Heißt "relativ sicher", dass du da was weißt?

Ein Polling wäre problematisch, weil zum einen einige Prozesse durch die Lappen gehen und zum anderen das ganz schön Last erzeugen kann.

Danke soweit. Gibt's noch andere Ideen?

cosmac
Beiträge: 4576
Registriert: 28.03.2005 22:24:30

Beitrag von cosmac » 19.03.2008 13:50:49

hi,

naja, wenn ein Prozess beendet ist, bevor du ihn anzeigen
kannst, sollte der Verlust nicht so tragisch sein.

Du könntest den Quelltext von top oder htop anschauen, was
die beiden pollen. Merkliche Last erzeugen die eher nicht.

Theoretisch sollte es gehen, wenn man inotify(7) auf /proc
ansetzt. Jeder neue Prozess würde dann einen inotify-Event
erzeugen. Ein kurzer Test mit inotifywait(1) hat bei mir aber
weder mit /proc noch mit /sys funktioniert.
Beware of programmers who carry screwdrivers.

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von gms » 19.03.2008 16:58:10

sowas geht über das libaudit Interface in Kombination mit dem ptrace Systemcall

Gruß
gms

Antworten