когда процесс уничтожается, эта информация зарегистрирована где-нибудь?

Затем "и печать" прием

<?php $flag and print "Blah" ?>

повторит Вздор, если $flag будет верен. НЕ РАБОТАЕТ С ЭХОМ.

Это очень удобно в шаблоне и замене?: это не действительно легко считать.

6
задан Aaron 6 December 2009 в 00:14
поделиться

6 ответов

Если ваше ядро ​​Linux скомпилировано с включенной опцией учета процессов ( CONFIG_BSD_PROCESS_ACT ), вы можете начать запись информации об учете процессов, используя accton (8 ) и используйте sa (8) для доступа к записанной информации. Записанная информация включает 32-битный код выхода, который включает номер сигнала.

(Этот материал не так широко известен / не используется в наши дни, но я все еще помню его со времен 4.x Bsd на VAXes ...)

7
ответ дан 8 December 2019 в 16:04
поделиться

Изменено: Короче говоря, ядру ОС все равно, если процесс будет убит. Это зависит от того, регистрирует ли что-нибудь процесс. Все, что заботит ядро ​​на этом этапе, - это освобождение памяти. Но читайте дальше, о том, как его поймать и зарегистрировать ...

Согласно caf и Stephen C , упомянутому в их комментариях ...

  1. Если вы запускают модуль демона учета BSD в ядре, все регистрируется. Спасибо Стивену Си за указание на это! Я не осознавал эту функциональность, поскольку у меня она отключена / отключена.
  2. Оглядываясь назад, в соответствии с комментарием caf - два сигнала, которые невозможно поймать, это SIGKILL и SIGSTOP , а также тот факт, что я упомянул atexit и описал в коде, это должно было быть exit (0); .. ooops Спасибо, кафе!

Исходный

Лучший способ поймать сигнал уничтожения - это использовать обработчик сигналов для обработки нескольких сигналов , а не только SIGKILL , SIGABRT (прерывание), SIGQUIT (завершение программы терминала), SIGSTOP и SIGHUP (зависание). Эти сигналы вместе - это то, что может поймать команду kill в командной строке. Затем обработчик сигналов может регистрировать информацию, хранящуюся в / var / log / messages (зависит от среды или дистрибутива Linux). Для получения дополнительной информации см. здесь .

Также см. здесь для примера того, как использовать обработчик сигнала с помощью функции sigaction .

Также было бы неплохо использовать использование функция atexit , затем, когда код выйдет из во время выполнения, среда выполнения выполнит последнюю функцию перед возвратом в командную строку. Ссылка для atexit - здесь .

Когда функция C exit используется и выполняется, функция atexit будет выполнять указатель функции там, где он применяется, как в примере ниже. - Спасибо за caf !

Пример использования atexit , как показано:

#include <stdlib.h>

int main(int argc, char **argv){
   atexit(myexitfunc); /* Beginning, immediately right after declaration(s) */
    /* Rest of code */
   return 0;
   exit(0);
}

int myexitfunc(void){
   fprintf(stdout, "Goodbye cruel world...\n");
}

Надеюсь, это поможет, функция atexit будет выполнять указатель функции там, где он применяется, как в примере ниже. - Спасибо caf за это!

Пример использования atexit , как показано:

#include <stdlib.h>

int main(int argc, char **argv){
   atexit(myexitfunc); /* Beginning, immediately right after declaration(s) */
    /* Rest of code */
   return 0;
   exit(0);
}

int myexitfunc(void){
   fprintf(stdout, "Goodbye cruel world...\n");
}

Надеюсь, это поможет, функция atexit будет выполнять указатель функции там, где он применяется, как в примере ниже. - Спасибо caf за это!

Пример использования atexit , как показано:

#include <stdlib.h>

int main(int argc, char **argv){
   atexit(myexitfunc); /* Beginning, immediately right after declaration(s) */
    /* Rest of code */
   return 0;
   exit(0);
}

int myexitfunc(void){
   fprintf(stdout, "Goodbye cruel world...\n");
}

Надеюсь, это поможет, С наилучшими пожеланиями, Том.

4
ответ дан 8 December 2019 в 16:04
поделиться

Если вы пишете свою собственную программу, вы можете поймать сигнал уничтожения и записать в файл журнала, прежде чем фактически умереть. Это не работает с kill -9, это просто обычное убийство.

Вы можете увидеть некоторые подробности здесь .

1
ответ дан 8 December 2019 в 16:04
поделиться

Я не знаю ни одной записи в журнал сигналов, отправленных процессам, если только это не делает убийца OOM.

1
ответ дан 8 December 2019 в 16:04
поделиться

Если процесс получает его через kill (2), , тогда, если процесс уже не ведет журнал, единственной внешней трассировкой будет мод ядра. Это довольно просто; просто выполните printk () , это как printf (). Найдите вывод в dmesg .

Если процесс получает его через / bin / kill , то установить исполняемый файл оболочки, который ведет журнал, будет относительно легко. Но это (доставка сигнала через / bin / kill ) маловероятно, потому что kill также встроен в bash.

1
ответ дан 8 December 2019 в 16:04
поделиться

Если вы используете sudo , он будет зарегистрирован. Помимо этого, убитый процесс может регистрировать некоторую информацию (если только он не был завершен с крайними предубеждениями). Вы даже можете взломать ядро ​​для регистрации сигналов.

Что касается записи причины, по которой процесс был убит, я еще не видел экстрасенсорной программы.

Взлом ядра не для слабонервных, это чертовски весело. Вам нужно будет исправить подпрограммы отправки сигналов для регистрации информации с помощью printk (9) , когда kill (3) , sigsend (2) или что-то подобное. называется.

1
ответ дан 8 December 2019 в 16:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: