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

 Zurück zu Pro-Linux   Foren-Übersicht   FAQ     Suchen    Mitgliederliste
Prozesse: Vater wartet 1 sekunde auf Kind und killed es dann.

 
Neuen Beitrag schreiben   Auf Beitrag antworten    Pro-Linux Foren-Übersicht -> Programmieren - C
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Lateralus
prolinux-forum-admin


Anmeldungsdatum: 05.05.2004
Beiträge: 1238

BeitragVerfasst am: 18. Nov 2004 11:52   Titel: Prozesse: Vater wartet 1 sekunde auf Kind und killed es dann.

Ich habe ein kleines Problem in C

Ich möchte ein Programm schreiben, dass 1. forked() 2. der Elternprozess eine bestimmte Zeitlang wartet, und dann das Kind killed, aber nur wenn es sich nicht selbst bereits beendet hat. Wenn das Kind sich schon beendet hat, soll der Elternprozess weiterlaufen. (Das folgende Programm erfüllt die Aufgabe also nicht.)

Code:

#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <unistd.h>

int main()
{
   pid_t pid;

   if( (pid=fork()) == 0){
      while(1){
         if( (rand()) < (RAND_MAX/1000)*999 )
            printf("Ich bin das Kind, ich spiele!\n");
         else{
            printf("Aber vielleicht beende ich mich auch!\n");
            exit(0);
         }

      }
   }

   if( pid > 0){
      sleep(1);
      kill(pid, SIGQUIT);
   }

   if( pid < 0){
      fprintf(stderr, "fork() fuehrte zu einem Fehler!\n");
      exit(1);
   }

   return 0;

}
 
Benutzer-Profile anzeigen Private Nachricht senden

_MP_



Anmeldungsdatum: 04.09.2004
Beiträge: 45

BeitragVerfasst am: 18. Nov 2004 14:39   Titel:

Was spricht denn gegen die aktuelle Version deines Programmes? Die (eventuell ehemalige) PID des Childprozesses kannst du doch mit einem kill() verwenden. Ist der Prozeß nicht mehr da, macht es nix und wenn er da ist, wird er halt beendet. Ich glaube jedenfalls nicht, dass die realistische Gefahr besteht, dass innerhalb dieser <1 sec die 65534 anderen, möglichen PIDs verbraucht werden und es plötzlich wieder einen Prozeß mit der gleichen PID gibt.
_________________
cu

MP

http://www.linuxboard.org - das Linux Entwickler- und Anwenderforum
 
Benutzer-Profile anzeigen Private Nachricht senden

jochen
prolinux-forum-admin


Anmeldungsdatum: 14.01.2000
Beiträge: 699
Wohnort: Jülich

BeitragVerfasst am: 18. Nov 2004 15:23   Titel:

Ansonsten suchst Du wohl wait(2) mit Option WNOHANG (wenn ich die Manual Page nicht falsch interpretiert habe). Damit kann man darauf warten, dass sich ein Prozess mit einer gegebenen PID beendet. Durch WNOHANG sollte der Aufruf mit Returncode 0 direkt wiederkommen, ansonsten ist der Returncode die PID des ehemaligen Child-Prozesses.

Jochen
_________________
Die grösste Lüge der EDV? "Mal eben..."
 
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen

Lateralus
prolinux-forum-admin


Anmeldungsdatum: 05.05.2004
Beiträge: 1238

BeitragVerfasst am: 18. Nov 2004 16:41   Titel:

Erst mal danke für die Hilfe, aber es ist noch nicht ganz das, was ich will.

Das Beispiel war wie gesagt nur ein Beispiel. Es geht im konkreten um einen TCP-Connect-Portscanner. Das Problem ist, dass bei gefilterten Ports keine Antwort kommt, der Kindprozess (welcher einen socket zum port öffnet) also bis in alle Ewigkeit wartet. Bei einer Antwort kommt diese aber meist innerhalb von (naja kommt auf den traffic im Netz an, aber) sagen wir mal 200 Millisekunden. Wenn ich aber eine Sekunde lang warte verschwende ich Zeit, was bei 2^16 Ports stressig wird. Deshalb darf 1. der Vater nicht warten, bis das Kind sich selbst beendet hat und 2. der Vater aber auch nicht genau eine Sekunden warten, weil sich das Kind dann vielleicht inzwischen beendet hat.

wait erfüllt deshalb meine Ansprüche meiner Meinung nach nicht.

edit: Ist es vielleicht möglich, dass das Kind dem Elternprozess ein Signal schickt und dieser darauf sleep() seien lässt und zur nächsten Zeile Code springt?
 
Benutzer-Profile anzeigen Private Nachricht senden

_MP_



Anmeldungsdatum: 04.09.2004
Beiträge: 45

BeitragVerfasst am: 18. Nov 2004 17:22   Titel:

Ähm - wie? wait() wartet mit oben genannter Option nicht - also wo ist das Problem?
_________________
cu

MP

http://www.linuxboard.org - das Linux Entwickler- und Anwenderforum
 
Benutzer-Profile anzeigen Private Nachricht senden

Lateralus
prolinux-forum-admin


Anmeldungsdatum: 05.05.2004
Beiträge: 1238

BeitragVerfasst am: 18. Nov 2004 19:35   Titel:

Um ehrlich zu sein: Ich habe keine Ahnung. Ich arbeite zum ersten mal mit Prozessen, würdest du dir die Mühe machen, ein bisschen Code zu posten?
 
Benutzer-Profile anzeigen Private Nachricht senden

Udo Maslo
Gast





BeitragVerfasst am: 20. Nov 2004 3:07   Titel:

Lateralus hat folgendes geschrieben::

Das Problem ist, dass bei gefilterten Ports keine Antwort kommt, der Kindprozess (welcher einen socket zum port öffnet) also bis in alle Ewigkeit wartet.


Warum ist der so blöd und wartet ewig? Und wenn es wirklich so blöde Dinge gibt, kann man ja alarm schlagen.
 

Udo Maslo
Gast





BeitragVerfasst am: 20. Nov 2004 3:33   Titel:

Habe gerade etwas anderes von Lateralus gelesen:

Segmentation fault und Großes Fragezeichen in Bezug auf malloc

Da komme ich doch erstmal zu dem Schluß, er sollte noch eine Weile üben, ehe er sich mit palallel-verarbeitenden Dingen (nur so wird es was ordentliches) beschäftigt.
Bei seinem Design muß ja einfach damit gerechnet werden, daß es 2^16s dauert, wobei 1s ja fast zu kurz ist.

Und dann noch solche Annahmen:
(na gut, 640kB Arbeitsspeicher reichen ja auch ...)
Zitat:

Was spricht denn gegen die aktuelle Version deines Programmes? Die (eventuell ehemalige) PID des Childprozesses kannst du doch mit einem kill() verwenden. Ist der Prozeß nicht mehr da, macht es nix und wenn er da ist, wird er halt beendet. Ich glaube jedenfalls nicht, dass die realistische Gefahr besteht, dass innerhalb dieser <1 sec die 65534 anderen, möglichen PIDs verbraucht werden und es plötzlich wieder einen Prozeß mit der gleichen PID gibt.

Für solchen Schwachfug gehört man gekreuzigt! Leider scheint bei einem Großteil von GNU-Linux-Programmen ähnliches Gedankengut inne zu wohnen! Inzwischen glaube ich fast, MS hat mit seiner TCO-Werbung recht, ich kenne ich den ganzen MS-Kram nicht so recht, werde es wohl aber bald probieren.
 

_MP_



Anmeldungsdatum: 04.09.2004
Beiträge: 45

BeitragVerfasst am: 20. Nov 2004 8:19   Titel:

Hm, was kriecht um 4.33 Uhr nun eigentlich aus den Löchern: die Besoffenen oder die Trolle? Papas 12jähriger größenwahnsinniger Sohn wird es um die Zeit ja kaum noch sein...
_________________
cu

MP

http://www.linuxboard.org - das Linux Entwickler- und Anwenderforum
 
Benutzer-Profile anzeigen Private Nachricht senden

Lateralus
prolinux-forum-admin


Anmeldungsdatum: 05.05.2004
Beiträge: 1238

BeitragVerfasst am: 20. Nov 2004 12:21   Titel:

Hi Udo

Vielen Dank für die Antwort. In der Tat übe ich gerade. Was hat Speicherverwaltung mit Prozessverwaltung zu tun?

Du scheinst ja das Wissen zu haben, mir zu helfen. Würdest du es bitte auch posten, dann kämen wir auch zurück zum Thema.
 
Benutzer-Profile anzeigen Private Nachricht senden

klopskuchen
prolinux-forum-admin


Anmeldungsdatum: 26.06.2004
Beiträge: 1444

BeitragVerfasst am: 20. Nov 2004 22:22   Titel:

Udo Maslo schrieb:
> Habe gerade etwas anderes von Lateralus gelesen:

ARSCHLOCH
_________________
When all else fails, read the instructions .
 
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen

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

 
Gehen Sie zu:  

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