Frage

ich arbeite mit einem Multi-Threaded-Programm (mit pthreads), die zur Zeit einen Hintergrund-Thread (PTHREAD_DETACHED) erstellen und dann rufe pthread_exit (0). Mein Problem ist, dass der Prozess dann als „nicht mehr existierenden“ aufgeführt ist und neugierig machen scheint nicht zu „wirklich existiert“ in / proc (was meine Debug-Strategien besiegt)

Ich mag die folgenden Voraussetzungen erfüllt sein:

  • das Programm sollte Funktion A in einer Schleife und Funktion B läuft einmal
  • die PID des Programms gegeben / proc / $ pid / exe / proc / $ pid / Karten und / proc / $ pid / fd müssen zugänglich sein (wenn der Prozess nicht mehr existierenden, sie sind alle leer oder ungültig Links)
  • muss es möglich sein, das Programm mit STRG + C und STRG + Z wie üblich
  • auszusetzen / unterbrechen

edit: Ich zögere die Oberfläche des Programms zu ändern in einem abgeteilten Faden in den "main" Gewinden und B A mit (sie zur Zeit in der anderen Richtung sind). Wäre es das Problem lösen?

War es hilfreich?

Lösung

Sie kann entweder die Ausführung des Hauptprozesses suspendieren für ein Signal warten, oder sie lösen nicht den Faden (mit dem Standard PHTREAD_CRATE_JOINABLE ) mit einem pthread_join() für deren Beendigung zu warten.

Andere Tipps

Gibt es einen Grund, warum Sie nicht die Dinge anders herum tun können: hat den Haupt-Thread die Schleife läuft, und führen Sie die einmalige Aufgabe im Hintergrund-Thread

Nicht das eleganteste Design, aber vielleicht könnte man den Haupt-Thread Block vor dem Verlassen mit:

 while(1) {
       pause();
 }

Dann können Sie einen Signal-Handler für SIGINT und SIGTERM installieren, die die Schleife bricht. Der einfachste Weg dafür ist: exit (0): -).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top