2016-07-30 7 views
0

Was ist die am wenigsten schreckliche Art zu implementieren "alle Threads auf Panik" wickeln? Ich möchte, dass jeder Thread (Versuch) in Panics und SIGINTs (und SIGKILLs?) In Würde stirbt.Wie alle Threads auf Panik abwickeln?

Es scheint nicht, gibt es eine Rost-Möglichkeit, Threads zu unterbrechen, also denke ich, dass ich ein Merkmal ähnlich runOneStep implementieren würde und meine Threads einen boolean überprüfen oder libc Interrupt-Behandlung betrachten.

Ich habe gesehen How can I cause a panic on a thread to immediately end the main thread?, die im Grunde die hacky Art der Einstellung ist. Ich habe auch Thread::cancel() support gesehen.

+1

Könnten Sie ein bisschen mehr auf Ihr Ziel erweitern? Da Sie den verlinkten Forum-Beitrag von Internals bereits gelesen haben, verstehen Sie, warum etwas wie "Thread :: cancel" eine schlechte Idee wäre. Was ist los mit dem Beenden des Programms? – Shepmaster

+0

Ich habe Aufräumarbeiten an einigen Threads, die ich sehr gerne ausführen möchte. Eine separate Programmüberwachung für die Gesundheit des Benutzers zu haben, würde funktionieren, aber ich denke, das bringt mehr Komplexität. Diese Art von Sache in Java würde von einem ShutDownHook zur Verfügung gestellt werden, aber das ist etwas Laufzeit Magie. – mfarrugi

Antwort

1

Sie können auf einem SIGKILL nichts anmutiges tun. Das ist es, was SIGKILL bedeutet. Es gibt eine weniger strenge Tötung, ich denke, es heißt ABORT. (Ich bin ein Old-Schooler, und ich beziehe mich auf ihre Zahlen: Kill ist 9, Abbruch war, denke ich, 15.)

+0

Wenn es nur eine Ressource gäbe, könnten Sie sich darauf beziehen, um sicher zu sein, was die Signalnamen und -nummern waren ...^_^Wenn OP beschließt, zu einem anderen Signal zu wechseln, was wäre die Lösung? – Shepmaster

+0

OP fragt: * Würdevoll sterben ** auf Panik ** und Sigkills * (Hervorhebung meins); Welche Lösungen gibt es für diesen Fall? – Shepmaster

Verwandte Themen