2010-10-11 11 views
16

Ho il requisito di scrivere su un file di registro alla ricezione di qualsiasi comando di terminazione come SIGTERM E SIGKILL.Gestore segnale SIGKILL

Posso registrarmi a SIGTERM ma come gestire il segnale SIGKILL?

+0

lettura suggerita: [Tentativo di gestire SIGKILL] (http://stackoverflow.com/questions/3689403/how-do-i-send- a-signal-to-perl-on-windows) –

+1

possibile duplicato di [Come gestire con garbo il segnale SIGKILL] (http://stackoverflow.com/questions/2541597/how-to-gracefully-handle-the-sigkill- signal-in-java) –

+0

@Ben Voigt: Sono riluttante a contrassegnare questo come un duplicato del "Come gestire con garbo il segnale SIGKILL" in quanto la domanda contiene informazioni errate che suggeriscono che il Control-C invia un segnale KILL quando in realtà invia un segnale INTR. – Omnifarious

risposta

21

Non è possibile, almeno non per il processo di essere ucciso.

Cosa si può fare è organizzare per il processo padre di guardare per la morte del processo figlio e agire di conseguenza. Qualsiasi sistema di supervisione del processo decente, come ad esempio daemontools, ha una tale struttura integrata.

+0

L'utilizzo del processo principale è più semplice, ma non richiesto. Qualsiasi processo che trattiene l'altra estremità di una pipe o di una fifo verrà avvisato quando il suo peer viene ucciso. –

+0

@ Ben: la pipe può essere chiusa con altri mezzi oltre alla morte del processo e quindi non è altrettanto affidabile. Ma se non controlli il processo genitore, quella potrebbe essere l'unica opzione che hai. (daemontools ha un programma 'fghack' che funziona su quella premessa.) –

Problemi correlati