Signalbehandlung und SIGTERM

sebl11

sebl11

Grünschnabel
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
 
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;

}
 

Ähnliche Themen

Samba User importieren

Textdatei filtern und löschen mit grep /sed

Liste mischen. Alternativen zu sort -R

Service oder Screen überwachen und ggf. Neustarten?!

Gruppe mitsamt allen Usern löschen?

Zurück
Oben