10.4.7. Дамп ядра

10.4.7. Дамп ядра

Хотя мы уже упоминали, что передача SIGTERM и SIGKILL функции kill() прерывает процесс, вы также можете использовать несколько других значений (все они описаны в главе 12). Некоторые из них, такие как SIGABRT, заставляют программу перед уничтожением сбрасывать дамп ядра (dump core).

Дамп ядра программы содержит полную хронологию состояния программы перед ее уничтожением[27]. Большинство отладчиков, включая gdb, могут анализировать файл дампа и рассказывать, что программа делала непосредственно перед тем, как была уничтожена, а также поможет исследовать образ памяти процесса. Дамп ядра выгружается в файл по имени core, расположенный в текущем каталоге процесса.

Когда процесс нарушает какие-то системные требования (например, пытается обратиться к памяти, доступ к которой запрещен), ядро прерывает процесс, вызывая встроенную версию kill() с параметром, который заставляет выгрузить дамп ядра. Ядро может уничтожать процессы по разным причинам, включая арифметические ошибки, такие как деление на ноль, либо по причине выполнения программой некорректных инструкций, либо при попытке доступа к запрещенной области памяти. Последняя причина вызывает ошибку сегментации, что выражается в сообщении segmentation fault (core dumped) (ошибка сегментации (дамп ядра сброшен)). Если вы обладаете хоть каким-нибудь опытом программирования в Linux, то наверняка неоднократно получали это сообщение.

Если для процесса установлен лимит на размер файла дампа, равный 0 (рассматривался ранее в этой главе), то никакой дамп ядра не выгружается.

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

6.2.3 Размещение ядра

Из книги Архитектура операционной системы UNIX автора Бах Морис Дж

6.2.3 Размещение ядра Несмотря на то, что ядро работает в контексте процесса, отображение виртуальных адресов, связанных с ядром, осуществляется независимо от всех процессов. Программы и структуры данных ядра резидентны в системе и совместно используются всеми процессами.


17.5.7. Установка ядра

Из книги Linux-сервер своими руками автора Колисниченко Денис Николаевич

17.5.7. Установка ядра После этого остается сделать последний шаг - установить ядро и перезагрузиться. Для установки ядра вы должны иметь права суперпользователя. (Хотя в начале главы и было сказано, что для компиляции ядра надо иметь права суперпользователя, однако все


5.8.6. Параметры ядра

Из книги Сетевые средства Linux автора Смит Родерик В.

5.8.6. Параметры ядра Параметр debug ядра Linux задает уровень отладки. Сообщения ядра (важные и не очень) передаются через функцию prinfk(). Если сообщение очень важное, то его копия будет передана на консоль, а также демону klogd для регистрации сообщения на жестком диске. Сообщения


18 Компилирование ядра

Из книги Введение в QNX/Neutrino 2. Руководство по программированию приложений реального времени в QNX Realtime Platform автора Кёртен Роб

18 Компилирование ядра В этой главе будет рассмотрены все этапы компилирования ядра, а также приведены рекомендации по повышению производительности системы.В показательных целях мною в примерах использовано ядро 2.2.17, но ниже написанное верно также и для более поздних


18.1. Параметры ядра

Из книги Linux глазами хакера автора Флёнов Михаил Евгеньевич

18.1. Параметры ядра Во время загрузки ядру ОС Linux могут быть переданы различные параметры. В этой главе будут рассмотрены не все параметры ядра (полное их описание занимает достаточно много места). За более подробным их описанием вам следует обратиться к BootPrompt-HOWTO. Передача


18.2. Конфигурирование ядра

Из книги UNIX: разработка сетевых приложений автора Стивенс Уильям Ричард

18.2. Конфигурирование ядра Итак, немного разобравшись в параметрах ядра, приступим к его конфигурированию. Однако перед тем как приступить, убедитесь, что у вас установлены исходники ядра и пакет заголовков:kernel-2.2.17-21mdk.i586.rpmkernel-headers-2.2.17-21mdk.i586.rpmЗатем перейдите в каталог,


18.3. Компилирование ядра

Из книги Виртуальная библиотека Delphi автора

18.3. Компилирование ядра Теперь, когда все устройства сконфигурированы, нужно сохранить файл конфигурации ядра и перейти непосредственно к этапу компилирования ядра. Введите команду:# make depПосле завершения ее работы необходимо ввести команду:# make bzImageЕсли исходники ядра и


Конфигурация ядра

Из книги автора

Конфигурация ядра Для того чтобы установить опции, определяющие процесс компиляции ядра, необходимо иметь в наличии исходный код ядра. Исходный код входит в состав всех дистрибутивных пакетов, но при установке системы можно либо разрешить, либо запретить копирование


Компиляция ядра

Из книги автора

Компиляция ядра После того как вы сконфигурировали ядро системы, выполнив make xconfig или другую команду, приведенную в начале данной главы, вы должны скомпилировать ядро и установить его модули. Для этого необходимо выполнить следующие команды:# make dep# make bzImage# make modules# make


Роль ядра

Из книги автора

Роль ядра Наша аналогия с процессами в жилом доме прекрасна для объяснения концепций синхронизации, но бесполезна при анализе одной очень важной проблемы. В доме у нас было много потоков, работающих одновременно. Однако в реальной жизненной ситуации обычно имеется


3.8.3. Компиляция ядра

Из книги автора

3.8.3. Компиляция ядра При установке из RPM-пакета мы получаем модульное ядро, в котором драйверы устройств могут быть как скомпилированы в одно целое с ядром, так и загружаться отдельно. Такое ядро медленнее в работе, но позволяет обновлять драйверы простой заменой


14.11.1. Параметры ядра

Из книги автора

14.11.1. Параметры ядра Для начала откроем конфигурационный файл /etc/sysctl.conf. В нем находятся параметры ядра. Пример файла можно увидеть в листинге 14.1.Листинг 14.1. Конфигурационный файл /etc/sysctl.conf# Kernel sysctl configuration file for Red Hat Linux# Конфигурационный файл ядра для Red Hat Linux# For binary values, 0 is


Сокеты ядра BSD

Из книги автора

Сокеты ядра BSD Мы начнем с FreeBSD, операционной системы с Беркли-ядром, в котором все функции сокетов являются системными вызовами. Программа трассировки системных вызовов имеет название ktrace. Она выводит информацию о трассировке в файл (по умолчанию имя этого файла ktrace.out),


Дамп памяти (взят из PE.TXT)

Из книги автора

Дамп памяти (взят из PE.TXT) Далее я привожу целиком фрагмент файла PE.TXT. Это — конкретный пример размещения ресурсов с подробным дампом памяти. The following is an example for an app. which wants to use the following data as resources: TypeId# NameId# Language ID Resource Data 00000001 00000001 0 00010001 00000001 00000001 1 10010001 00000001 00000002 0 00010002 00000001 00000003 0