gdb meldet durch pthread_kill ausgelöste Signale



  • Hi!

    Beim (programmierten) Shutdown meines Programms sollen alle erstellen Threads gekillt werden:

    void shutdown ()
    {
        kille_alle_threads ();
        cout << "Still alive" << endl;
    }
    

    Hierbei killt kille_alle_threads (); die Threads mit einem Aufruf von pthread_kill (threadID, SIGKILL); pro Thread.

    Wenn ich das Programm normal starte und intern die Funktion shutdown () aufrufe, bekomm ich ganz normal die Meldung "Still alive".

    Wenn ich das Programm jedoch mit gdb starte, bekomm ich die Meldung:

    Program terminated with signal SIGKILL, Killed.
    

    und das gewünschte "Still alive" bleibt aus -> gdb hat den ganzen Prozess weggekratzt.

    Kann ich gdb irgendwie so einstellen, dass er Signale, die nicht an den "Haupt-Thread" gehen, ignoriert, oder die Threads so killen, dass gdb nichts davon merkt?



  • sigkill kann nicht abgefangen werden. verwende sigterm.



  • Da tritt das selbe Problem auch auf, ebenso wie bei SIGINT. Außerdem soll das Signal ja auch gar nicht abgefangen werden, die Thread sollen einfach so gekillt werden, ohne dass gdb das merkt. Wenn ich das Programm normal in der Shell starte bekomm ich ja auch die gewünschte Meldung "Still alive" -> das ganze funktioniert.

    Aber ich hab das ganze jetzt mit pthread_cancel () gelöst, hab nicht gewusst, dass es die Funktion gibt. 😉


Log in to reply