Signalbehandlung und SIGTERM

Dieses Thema im Forum "C/C++" wurde erstellt von sebl11, 10.12.2012.

  1. sebl11

    sebl11 Grünschnabel

    Dabei seit:
    26.03.2012
    Beiträge:
    2
    Zustimmungen:
    0
    Hallo Liebe Community,
    ich bin neu hier(zwar schon ne weile angemeldet aber mein erster Beitrag) und möchte gern ein Programm schreiben, wo ich mit einer signalbehandlung einen Kindprozess über das Kommando SIGTERM stoppe. Ich hab ein Programm mit einen Countdown geschrieben dieser soll dann mit dem Befehl(SIGTERM) gestoppt werden.

    Danke schonmal im vorraus.

    MFG
    sebl11
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. Krotti

    Krotti Foren As

    Dabei seit:
    01.03.2007
    Beiträge:
    78
    Zustimmungen:
    0
  4. sebl11

    sebl11 Grünschnabel

    Dabei seit:
    26.03.2012
    Beiträge:
    2
    Zustimmungen:
    0
    Hallo sry das ich nicht geantwortet habe. Mittlerweile hab ich die Lösung :D
    Kann es ja mal posten

    Code:
    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
    #include <signal.h>
    #include <sys/wait.h>
    
    void signalroutine(int sig)
    {
        printf("Signal %i empfangfen\n\r", sig);
        exit(0);
    }
    
    
    int main(int argc,char *argv[])
    {
        if(signal(SIGCHLD, signalroutine) == SIG_ERR)
        {
            fprintf(stderr, "keine behandlung");
            exit(1);
        }
    
        int  PID = 0;
        sigset_t sigmaske;
    //    struct sigaction neu;
    
        sigemptyset(&sigmaske);
    //    sigaddset(&sigmaske, SIGTERM);
        sigaddset(&sigmaske, SIGCHLD);
        sigprocmask(SIG_BLOCK, &sigmaske, NULL);
    
    /*    if((sigismember(&sigmaske, SIGTERM)) == 0){     //kontrolle ob sigtermin der maske ist
            sigaddset(&sigmaske, SIGTERM);
        }
        else{
            printf("SIGTERM ist bereits vorhanden!!!\n");
        }*/
    
        if((sigismember(&sigmaske, SIGCHLD)) == 0){     //kontrolle ob sigchld in der maske ist
            sigaddset(&sigmaske, SIGCHLD);
        }
        else{
            printf("SIGCHLD ist bereits vorhanden!!!\n");
        }
    
        PID = fork();
        switch(PID)
        {
        case -1:
        {
            break;
        }
        case 0:
        {
            execvp(argv[1], argv+1);        //Aufuehrung der Datei
        }
        default:
        {
            sleep(10);
            sigpending(&sigmaske);      // Abrufen von Signalen(erhalten)
    
            if((sigismember(&sigmaske, SIGCHLD)) == 1)     // Abfrage ob Kind noch lebt
            {
                printf("Countdown beendet!\n");
                wait(NULL);
            }
            else
            {
                printf("Countdown wird abgebrochen!\n");
                kill(PID, SIGTERM);     //Beenden des Prozesses
            }
        }
    
        }
    
    
        return 0;
    
    }
    
     
Thema:

Signalbehandlung und SIGTERM

Die Seite wird geladen...

Signalbehandlung und SIGTERM - Ähnliche Themen

  1. Demon im Runlevel2 erzeugt SIGTERM in den nachfolgenden Prozessen

    Demon im Runlevel2 erzeugt SIGTERM in den nachfolgenden Prozessen: Hallo Ich habe apache derby auf meinem UBUNTU-System installiert und lass es normal in runlevel 2 hochfahren. sh...