Prozesse beenden



  • Hallo!

    Vielleicht könnt ihr mir bei folgendem Problem helfen. Und zwar gehts um die ELSE IF ... Verzweigung. Wie kann ich das testen? Wenn ich den Prozess kille, dann wird ja so zusagen ein Signal mit einer bestimmten Nummer an den Kind-Prozess gesendet. Nur leider schießt sich der Programm dann ganz ab, ohne die ELSE IF ... Verzweigung abzuarbeiten. Kennt einer von euch ne Lösung für dieses Problem??

    Danke
    Tom

    // Datei: forkdemo.c
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <unistd.h> 
    #include <sys/types.h>
    #include <sys/wait.h>
    #include <iostream>
    using namespace std;
    
    // globale Variablen 
    int i = 10;
    int status;
    
    int main ()
    {
      // lokale Variablen 
      pid_t pid;
    
      cout <<"Beispiel zum Aufruf von fork()" <<endl;
    
      // einen neuen Prozess erzeugen 
      pid = fork ();
      cout <<"\nKind-PID= " <<getpid() <<"  Eltern-PID= " <<getppid();
    
      // Fallunterscheidung
      cout <<"\n";
    
      switch (pid)
      {
          	// Fehlerfall 
        	case -1:
          		fprintf (stderr, "Fehler beim Aufruf von fork().\n");
          		exit(0);
    
          	// Kindprozess
        	case 0:
          		 cout <<"Child-Prozess für 5 Sekunden schlafen gelegt." <<endl;
    		 sleep (5);
    		 //cout <<"\nChild-Prozess beendet.";
    		 exit(1);
    
          	// Vaterprozess bzw. pid  > 0
        	default:
          			cout <<"Parent-Prozess für 15 Sekunden schalfen gelegt" <<endl;
    			sleep (15);
    			pid=wait(&status);
    			if(WIFEXITED(status)) 
          			  {	cout <<"\nChild normal beendet...\n";
          				cout <<"Exit-Code: " <<WEXITSTATUS(status) <<endl; 
    			  }
        			 else if (WIFSIGNALED(status))
    			  {	cout <<"Child beendet über ein Signal...\n";
          				cout <<"Signalnummer die die Beendigung verursacht hat: " <<WTERMSIG(status) <<endl;	
    			  }
    			 exit(2);	  		
      }
    }
    


  • Kommando zurück.

    Habe rausgefunden woran es lag.

    gruss
    Tom


Anmelden zum Antworten