Pro-Linux.de

Pro-Linux

Pro-Linux Diskussions- und Hilfeforum
Aktuelle Zeit: 19. Nov 2018 17:00

Alle Zeiten sind UTC+01:00




Ein neues Thema erstellen  Auf das Thema antworten  [ 5 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Linux-Quellcodes und fork-Baum
BeitragVerfasst: 02. Dez 2006 16:59 
Offline

Registriert: 02. Dez 2006 16:40
Beiträge: 3
Also ich bin neu hier und ich wende mich an dieses Forum, weil ich bin echt überfordert. :cry: 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.


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 02. Dez 2006 19:31 
Offline
Benutzeravatar

Registriert: 11. Feb 2006 19:10
Beiträge: 3569
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.


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 03. Dez 2006 11:30 
Offline

Registriert: 02. Dez 2006 16:40
Beiträge: 3
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 :)
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 :)

Könnte man die Modifikation vielleicht auch in der init-Funktion vornehmen?


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 03. Dez 2006 14:16 
Offline
Benutzeravatar

Registriert: 11. Feb 2006 19:10
Beiträge: 3569
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.


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 03. Dez 2006 14:38 
Offline

Registriert: 02. Dez 2006 16:40
Beiträge: 3
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


Nach oben
   
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen  Auf das Thema antworten  [ 5 Beiträge ] 

Alle Zeiten sind UTC+01:00


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.
Sie dürfen keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
Powered by phpBB® Forum Software © phpBB Limited
Deutsche Übersetzung durch phpBB.de