Может ли процесс Linux умереть от механизма, отличного от фатального сигнала или вызова `exit (2)`? - PullRequest
0 голосов
/ 05 марта 2019

Насколько я знаю, единственное, как ядро ​​Linux может очистить запись процесса, - это если этот процесс выполняет системный вызов exit(2) или ему не удается обработать фатальный сигнал (например, SIGSEGV, SIGABRT,SIGTERM, SIGKILL и т. Д.).Я знаю, что SIGKILL не может быть обработано, и поэтому даже не «доставляется» в процесс ... это в некоторой степени соответствует тому, что я думаю здесь.

Предполагая, что само ядро ​​остается неизменными действительный (не заинтересованный в аппаратном сбое / отключении устройства / панике / и т.д.), существуют ли какие-либо другие способы уничтожения процесса?

Цель состоит в том, чтобы обеспечить охват системы отчетности о сбоях- Я почти уверен, что фатальные сигналы + exit(2) являются единственными способами, которыми я могу умереть, но я хотел бы убедиться.

1 Ответ

0 голосов
/ 05 марта 2019

Да, я верю, что вы правы, что это единственные возможности.

Вы можете подтвердить это из документации wait(2).Существует два связанных макроса, WIFEXITED() и WIFSIGNALED(), которые можно использовать, чтобы определить, почему wait вернул данный процесс.Других возможностей нет (я не считаю WIFSTOPPED(), так как он используется для обнаружения приостановленных процессов, а не процессов, которые завершились).

На самом деле, exit(3) - это не системный вызов, это Cбиблиотечная функция.Системный вызов _exit(2).exit(3) выполняет некоторую очистку C (например, очищает stdio буферы и вызывает atexit() функции), а затем вызывает _exit(2) для фактического выхода из процесса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...