2010-10-11 2 views
16

У меня есть требование записать в файл журнала при получении любой команды завершения, такой как SIGTERM AND SIGKILL.Обработчик сигнала SIGKILL

Я могу зарегистрироваться для SIGTERM, но как может обрабатывать сигнал SIGKILL?

+0

предлагается прочитать: [Попытка обработки SIGKILL] (http://stackoverflow.com/questions/3689403/how-do-i-send- a-signal-to-perl-on-windows) –

+1

Возможный дубликат [Как изящно обрабатывать сигнал SIGKILL] (http://stackoverflow.com/questions/2541597/how-to-gracefully-handle-the-sigkill- signal-in-java) –

+0

@Ben Voigt: Я не хочу отмечать это как дубликат «Как изящно обрабатывать сигнал SIGKILL», поскольку этот вопрос содержит дезинформацию, предполагающую, что Control-C посылает сигнал KILL, когда на самом деле это посылает сигнал INTR. – Omnifarious

ответ

21

Вы не можете, по крайней мере, не для того, чтобы процесс был убит.

Что вы можете сделать, чтобы родительский процесс следил за смертью детского процесса и действовал соответствующим образом. Любая подходящая система надзора за процессом, такая как daemontools, имеет такой объект.

+0

Использование родительского процесса проще всего, но не требуется. Любой процесс, который удерживает другой конец трубы или fifo, будет уведомлен, когда его сверстник будет убит. –

+0

@Ben: Труба может быть закрыта с помощью других средств, кроме смерти процесса, и поэтому не столь надежна. Но если вы не контролируете родительский процесс, это может быть единственный вариант, который у вас есть. (у daemontools есть программа 'fghack', которая работает на этой предпосылке.) –

Смежные вопросы