Hinweis: Das Forum wird geschlossen! Neue Registrierungen sind nicht mehr möglich!

 Zurück zu Pro-Linux   Foren-Übersicht   FAQ     Suchen    Mitgliederliste
Linux-Quellcodes und fork-Baum

 
Neuen Beitrag schreiben   Auf Beitrag antworten    Pro-Linux Foren-Übersicht -> Programmieren - Allgemein
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Der_Wanderer



Anmeldungsdatum: 02.12.2006
Beiträge: 3

BeitragVerfasst am: 02. Dez 2006 16:59   Titel: Linux-Quellcodes und fork-Baum

Also ich bin neu hier und ich wende mich an dieses Forum, weil ich bin echt überfordert. Crying or Very sad Mein Problem richtet sich an die, die wirklich Ahnung von der Programmierung und vom inneren Aufbau von Linux haben.

Mir wurde die Aufgabe gestellt den fork-Baum pro Nutzer in der Ebene zu beschränken. Also forken geht soviel man will, so lange die Prozesse nicht mit einander verwandt sind. (Fragt nicht dem Sinn dieser Modifikation, der ist mir selbst noch nicht so bewusst)

Nach langem googeln und stöbern in den Linux-Quellcodes bin ich in der Struktur struct_task in der sched.h auf einen Zeiger p_cptr gestoßen der, wenn ich das richtig verstanden habe, auf die verschiedenen Kinds-Ebenen Zeigt. Ich dachte mir, da kann ich vielleicht ein Zähler mitlaufen lassen und so die Ebenen zählen und dann abbrechen, wenn eine Grenze überschritten wurde.

Es gibt aber auch eine fork.c, vielleicht kann man auch dort eingreifen. Aber um ehrlich zu sein fällt es mir schwer in der fork.c durch zu steigen.

Meine Frage ist, ob ich so auf einem völlig falschen Dampfer bin, oder ob die Richtung stimmt. Hat jemand Erfahrung damit, kann mir jemand helfen, oder kann mir jemand Tipps geben? Ich weiß, das ganze ist ziemlich speziell.
 
Benutzer-Profile anzeigen Private Nachricht senden

Janka



Anmeldungsdatum: 11.02.2006
Beiträge: 3569

BeitragVerfasst am: 02. Dez 2006 19:31   Titel:

Lustige Idee, das. Leider wird mit dieser Vorgabe keine normale Software auf dem System mehr funktionieren. Starte mal ein paar Programme, und mach dann mal "pstree". Da siehst du dann etliche wichtige Programme, die erst in der dritten oder vierten Ebene von init abhängen.

Falls du es trotzdem machen willst: Du musst fork() dahingehend modifizieren, dass geprüft wird, ob die PID == 1 ist. Dann darf nur "init" neue Prozesse starten, und du hast nur eine Ebene unterhalb von init.

Um Forkbomben zu verhindern ist es sinnvoller, ein passendes ulimit zu setzen. Dafür braucht man gar nichts zu ändern.

Janka
_________________
Ich vertonne Spam immer in /dev/dsp statt /dev/null.
Ich mag die Schreie.
 
Benutzer-Profile anzeigen Private Nachricht senden

Der_Wanderer



Anmeldungsdatum: 02.12.2006
Beiträge: 3

BeitragVerfasst am: 03. Dez 2006 11:30   Titel:

Man müsste es bis auf 4 oder 5 Ebenen beschränken. Wenn init nur eine Ebene erzeugen darf, dann weiß ich nicht ob Linux überhaupt noch richtig bootet Smile
Es muß auch keine Software mehr laufen, hautpsache es ist noch eine Kommandozeile zu sehen.

Es ist halt eine Übungsaufgabe und deshalb müssen die Ebenen beschränkt werden, weil einfach nur die Anzahl der fork zu beschränken dürfte um eineiges leichter sein. Ich glaube nicht wirklich daß das mit den Ebenen einen praktischen nutzen hat Smile

Könnte man die Modifikation vielleicht auch in der init-Funktion vornehmen?
 
Benutzer-Profile anzeigen Private Nachricht senden

Janka



Anmeldungsdatum: 11.02.2006
Beiträge: 3569

BeitragVerfasst am: 03. Dez 2006 14:16   Titel:

Zum Üben, OK. Dann bitte aber auch selbst machen. Ich würde es folgendermaßen machen:

Bei jedem fork() die PPID des forkenden Prozesses abfragen. Dann die PPID dieses Prozesses abfragen usw., die Anzahl der Durchläufe mitzählen, bis die PPID==1 ist. Danach fork() erlauben bzw. verbieten.

Janka
_________________
Ich vertonne Spam immer in /dev/dsp statt /dev/null.
Ich mag die Schreie.
 
Benutzer-Profile anzeigen Private Nachricht senden

Der_Wanderer



Anmeldungsdatum: 02.12.2006
Beiträge: 3

BeitragVerfasst am: 03. Dez 2006 14:38   Titel:

Klar mach ich es selbst, mir fehlt halt bis jetzt nur ein vernünftiger Ansatz, da ich im Linux-Code ein bissl verloren bin.

Aber dein Vorschlag hört sich viel versprechend an, mal sehen ob ich das so hin kriege.

Danke für deine Hilfe
 
Benutzer-Profile anzeigen Private Nachricht senden

Beiträge vom vorherigen Thema anzeigen:   
     Pro-Linux Foren-Übersicht -> Programmieren - Allgemein Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehen Sie zu:  

Powered by phpBB © phpBB Group
pro_linux Theme © 2004 by Mandaxy