Системное программирование в UNIX средствами Free Pascal




Нормальное и аварийное завершение - часть 2


определен макрос WCOREDUMP, который возвращает истинное или ложное значение в зависимости от установки этого бита в своем аргументе. Тем не менее следует учесть, что макрос WCOREDUMP не определен спецификацией XSI. С применением этого макроса предыдущий пример можно переписать так:

(* Проверка, получил ли дочерний процесс сигнал *)

if WIFSIGNALED(status) then

begin

  sig_no := WTERMSIG(status);

  writeln('Сигнал номер ', sig_no, ' завершил процесс ', pid);

  if WCOREDUMP(status) then

    writeln('... создан файл дампа памяти');

end;

Формат файла core известен отладчикам UNIX, и этот файл можно использовать для изучения состояния процесса в момент сброса образа памяти. Этим можно воспользоваться для определения точки, в которой возникает проблема.

Стоит также упомянуть функцию abort, которая не имеет аргументов:

abort;

Эта функция посылает вызвавшему ее процессу сигнал SIGABRT, вызывая его аварийное завершение, то есть сброс образа памяти. Процедура

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




Содержание  Назад  Вперед