2016-12-01 3 views
-1

Ich habe eine Anwendung erstellt, die Befehle von einem anderen Prozess empfängt. Dort die beiden Befehle zum Beenden.Resolve Linux-Kern entsorgt

exit: verlässt den Hauptprozess (und seine Threads) und lässt die untergeordneten Prozesse ihre Aufgaben beenden.

Ausfahrt jetzt: den Hauptprozess vorhanden ist (und seine Threads) und sendet ein Signal, das die untergeordneten Prozesse zu

Der Ausfahrt Befehl funktioniert gut, aber die Ausfahrt jetzt seine nicht zu verlassen, ich bekomme eine Nachricht "Exit (core dumped)", wenn ich es benutze.

Der Befehl exit führt diese Funktion aus.

void processExit(){ 
    /* some code to close opened files and to wait for threads to finish (pthread_join) */ 
    exit(EXIT_SUCCESS); 
} 

Der Ausgang nun Befehl führt diese Funktion aus.

void processExitNow(){ 
    signal(SIGQUIT, SIG_IGN); 
    kill(0, SIGQUIT); 
    processExit(); 
} 

Also ich denke, die core dumped durch die Funktion Kill verursacht wird. Aber warum passiert das? Ich kann das Problem nicht finden.

Danke.

+1

Der Zweck 'SIGQUIT' ist ein Core-Dump zu erzeugen. Verwenden Sie ein anderes Signal. http://www.gnu.org/software/libc/manual/html_node/Termination-Signals.html –

+0

@DarkFalcon danke es hat funktioniert! Gibt es irgendeine Möglichkeit, ein Signal an alle untergeordneten Prozesse zu senden, ohne sie an den übergeordneten Prozess zu senden? –

+0

@DanielOliveira Verwenden Sie die PID des Kindes. Es wird von 'fork()' zurückgegeben. Sie können nicht mit Thread, weil es die gleichen Prozesse ist. Rufen Sie einen Thread nicht als Kindprozess auf. Es ist ein Thread. – Stargateur

Antwort