2013-04-02 10 views
5

Wenn ein Linux-Prozess wartet für I/O (d.h es ist in SLEEP Zustand) und ein SIGKILL Signal wird dagegen ausgegeben, bei Beendigung (STOPPED Zustand) wird es durch RUNNING oder READY Zustand übergehen?SIGKILL Signalhandhabungs

Mit anderen Worten, für einen Prozess, um einen System-Interrupt zu behandeln, wie einer von SIGKILL generiert wird, ist es notwendig, durch RUNNING oder READY Zustand zu passieren?

Wissen, dass unter normalen Umständen ein Prozess einen Interrupt von Kernel verarbeiten kann und wissend, dass SIGKILL einen ziemlich widersprüchlichen Zweck der Tötung eines nicht reagierenden Signals hat, war ich zweifelhaft, wie viel Kontrolle über den Prozess getötet wird, wenn überhaupt alle.

+0

"SIGKILL" ist ein unglückliches Beispiel, da es ein Signal ist, das nicht durch den Empfangsprozess behandelt werden kann. Wenn Ihre Frage nichts mit "SIGKILL" zu tun hat und nur ein Beispiel ist, sollten Sie ein anderes Signal verwenden, um auszudrücken, was Sie meinen. – nemo

Antwort

5

Signale werden vom Kernel an einen Prozess übergeben, so dass das Senden eines Signals von ProzessA an ProzessB den Kernel verwendet. Wenn SIGKILL ausgeliefert wird, erlaubt der Kernel keine Aktivität durch den Prozess (Benutzermodus), insbesondere Prozessablauf: atexit-Aufrufe, _exit. Nichts. Der Prozess wird einfach vom System zerstört. Dies beinhaltet einige Aktivitäten im Kernel-Modus. Gepufferte Daten sind verloren. SYSV-Semaphore und andere permanente Kernel-Speicherobjekte bleiben im Speicher. Es kann ein echtes Durcheinander sein.

Wenn etwas im Kernel-Speicher verursacht eine Sie die sysrq Schnittstelle in Linux verwenden hängen:

http://tldp.org/HOWTO/Remote-Serial-Console-HOWTO/security-sysrq.html

--to ausführen was Anschein einer geordneten Abschaltung Sie bekommen können.

Aus diesem Grund ist die Verwendung von SIGKILL der letzte Ausweg, weil Sie nicht wissen, was Sie brechen. Und es wird nicht alles hängen lassen.

Woran genau arbeiten Sie?

+0

Ich glaube nicht, dass die Frage des OP spezifisch für "SIGKILL" war. Ich verstehe es eher als "muss ein Prozess aktiv sein, um ein Signal zu verarbeiten". – nemo

+0

Ein Prozess muss einen CPU-Kontext haben, um Signale zu empfangen. SIGKILL ist etwas anders. Prozesse haben zwei Komponenten - Kernel - manchmal als P0, User Land Code, nennen Sie es P1. P0 und P1 werden einfach zum nicht ausgelagerten Pooled Pool-Pool und zum Systemspeicher zurückgegeben, wenn SIGKILL vom Kernel abgeholt wird. Einige Dinge wie Semaphore bleiben im Kernel-Speicher. In diesem Sinne wird P1 niemals aktiv. Sie könnten definitiv argumentieren, dass eine P0-Aktivität im Prozesskontext ist, aber Ihr Benutzermoduscode kann nichts dagegen tun. –

+0

Ja, das weiß ich und dein Beitrag sagt bereits, dass 'SIGKILL' nicht behandelt werden kann. Aber ich denke nicht, dass das OP nach "SIGKILL" fragt, sondern nach allen Signalen im Allgemeinen. Der erste Satz Ihres Kommentars ist also die Antwort auf die Frage IM des IM. – nemo

Verwandte Themen