2016-03-24 4 views
0

wenn i Neustart-Befehl ausgeben, erhalte ich die NachrichtWie kann ich registrieren und Linux-Neustart-Signal behandeln?

Neustart

.... .... das System nun für den Neustart nach unten geht! INIT: Prozesse des TERM-Signal gesendet ....

Deshalb "init" TERM an alle Prozesse sendet und i registriert TERM folgend

void sig_handler(int signum, siginfo_t *siginfo, void *ctx) 
{ 
    printf("!!! sig_handler: signum: %d\n", signum); 
    if (signum == SIGTERM && (long) siginfo->si_pid == 1) 
    { 
     printf("!!! sig_handler: send by init-process\n"); 
    } 
    exit(signum); 
} 

void sig_handler_reg(int signum) 
{ 
    struct sigaction act; 
    memset(&act, '\0', sizeof(act)); 
    act.sa_sigaction = sig_handler; 
    act.sa_flags = SA_SIGINFO; 
    sigaction(signum, &act, NULL); 
    printf("!!! sig_handler_reg: signum %d registered\n", signum); 
} 

i den Befehl auf der Kommandozeile ausgeben

pkill my_process

und ich erhalte die Nachricht

!!! sig_handler: signum: 15

Ausgabe i den Befehl auf der Kommandozeile

Neustart

und ich bekomme keine Meldung von sig_handler und das System neu startet

Was ist falsch?

jeden Hinweis geschätzt

Antwort

1

Das Signal zur Lauf jeden Prozess gesendet wird

Ihr Prozess des Mutter Prozess abgebrochen wird zu beenden, damit Ihr Prozess Waise wird und somit von init angenommen wird und es neu startet forceably die sysytem ohne Warten auf Ihren Prozess zu beenden

+0

Dank für Ihre Antwort. Der Elternteil meines Prozesses ist init, weil ich meinen Prozess in /etc/init.d/rc.local gestartet habe – elvis61

+0

was meinst du? Wie kann ich beim Neustart auslösen? – elvis61