Signale werden interpretiert als Exit



  • Hi Community,
    ich hab ein komisches Problem. Ich würde gerne über die Makros WIFSIGNALED und WIFEXITED herausfinden ob ein Kind über ein Singal oder normal beendet wurde.
    Das ganze findet in einem Signalhandler statt der dazu folgenden Code aufruft:

    int test(int newStatusCode)
    {
      if (WIFSIGNALED(newStatusCode)) // normale Terminierung mit exit ?    
         printf("Singal(%d)",WTERMSIG(newStatusCode));
      else if (WIFEXITED(newStatusCode))
         printf("Exit(%d)",WEXITSTATUS(newStatusCode));
    		}
     return 0;
    }
    

    So wenn ich jetzt aber ein Kind mittels Sigterm, also kill -15 terminiere, interpretiert das Makro WIFSIGNALED dies nicht als Signal sondern als WIFEXITED.
    Dies passiert bei allen Signalen, außer Signal 9 dass erkennt er korrekt.

    Kennt jemand das Phänomen?

    EDIT:
    Also ich habe mal geschaut und das Problem kommt anscheinend vom waitpid, dies liefert mir z.B. als Status für Signal 15 den Wert 3328.

    In meiner Demoanwendung wird hier der Status Wert 15 geliefert.



  • Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C (C89 und C99) in das Forum Linux/Unix verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Vielleicht fängt der Kindprozess das Signal und beendet sich dann normal?



  • Jupp, genau so ist es 😃
    Hat mich 4 Std meines Lebens nach einer Fehler suche gekostet der nicht Existierte. Eben im Zug ist mir die Idee auch gekommen, und nach einer Überprüfung hat sich es als richtig herausgestellt. Es ging genauer um Xterm das anscheinend alle Signale abfängt und sich normal beendet mit dem Exit Wert des zuvor bekommenen Signals.

    Naja aus sowas lernt man ^^

    Also dann Frohe Feiertage :xmas1:
    Gruß Vertax


Anmelden zum Antworten