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?
Neue Prozesse erkennen und steuern
-
- Beiträge: 468
- Registriert: 06.04.2006 08:55:20
- Lizenz eigener Beiträge: MIT Lizenz
-
Kontaktdaten:
kann sein dass ich danebenliege, aber trotzdem: Meines Wissens bekommt jeder Prozess in /proc ein eigenes (virtuelles) Verzeichnis . 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
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
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
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.
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.