shutdown_system()

Завершить работу системы

Прототип:

#include <sys/shutdown.h>
void shutdown_system( int type,
int flags );

Аргументы:

type
Тип завершения работы; один из следующих:
SHUTDOWN_PHOTON
выйти из Photon
SHUTDOWN_PHOTON_USER
выйти из Photon (аналогично SHUTDOWN_PHOTON).
SHUTDOWN_REBOOT
перезагрузить систему.
SHUTDOWN_SYSTEM
выключить систему.
flags
Ноль или комбинация следующих бит:
FLAG_FAST
выполнить “быстрое” завершение работы.
FLAG_DEBUG
режим отладки; в действительности не завершать работу системы.
FLAG_VERBOSE
добавить отладочный вывод.
FLAG_VERY_VERBOSE
добавить еще больше отладочного вывода.
FLAG_PHLOGIN
порожден из phlogin2 (не используется в стандартной библиотеке).
FLAG_PHOTON_REMOTE
удаленная сессия Photon.
FLAG_NONROOT
игнорировать права root (не используется в стандартной библиотеке).
FLAG_UNATTENDED
не запрашивать опции (не используется в стандартной библиотеке).
FLAG_NO_DAEMON
не превращать процесс в демона.

Библиотека:

libshutdown

Описание:

Функция shutdown_system() производит выход из оболочки Photon, перезагружает или завершает работу системы, в зависимости от аргумента type. Функция сначала производит попытку завершения приложений Photon, затем отключает сам Photon, а после все процессы, не относящиеся к Photon.

Вы можете настроить эту функцию, предоставив свои собственные обработчики, чтобы переопределить те, что имеются в библиотеке:

shutdown_classify()
shutdown_display()
shutdown_done()
shutdown_error()
shutdown_process()
shutdown_progress()
shutdown_prompt()

Утилиты phshutdown и shutdown используют данную библиотеку, предоставляя свои обработчики.

shutdown_classify()

ProcessClass_t shutdown_classify( ProcessInfo_t const *pip );

Данный обработчик определяет, является приложение консольным или использующим Photon, на основе информации, представленной в структуре, на которую указывает pip. Структура ProcessInfo_t определена следующим образом:

typedef struct {
uint64_t start_time;
pid_t pid;
int8_t class;
uint8_t padding[3];
char *name;
} ProcessInfo_t;

Функция shutdown_system() распознает некоторые приложения по их именам или другой вспомогательной информации, и вызывает shutdown_classify() для определения типа тех приложений, которые не были распознаны.

Обработчик shutdown_classify() должен возвращать один из определенных типов классов:

CLASS_UNKNOWN
CLASS_PHOTON_APP
приложение Photon.
CLASS_APP
не приложение Photon.
CLASS_DAEMON
сервер, менеджер ресурсов, или драйверы.
CLASS_FSYS
файловая система.
CLASS_DISPLAY
драйвер дисплея.

Обработчик по умолчанию всегда безоговорочно возвращает CLASS_UNKNOWN.

shutdown_display()

void shutdown_display( int type,
DisplayData_t const *display );

Данный обработчик может выводить имя процесса или класса процессов, которые завершают работу, в зависимости от аргумента type:

DISPLAY_CLASS
был замечен новый класс процессов.
DISPLAY_PROC
был замечен новый процесс.

Обработчик по умолчанию не выполняет никаких действий.

Структура DisplayData_t предоставляет информацию о том, что в данный момент завершает работу. Она определена следующим образом:

typedef union {
int proc_class; /* use for DISPLAY_CLASS */
char const *proc_name; /* use for DISPLAY_PROC */
} DisplayData_t;

Член proc_class является одним тех из типов классов, что возвращается функцией shutdown_classify().

shutdown_done()

void shutdown_done( int type );

Данный обработчик вызывается перед завершением работы дисплейных процессов, но после завершения работы остальных. Аргумент type передается тот же, что и в shutdown_system().

Обработчик по умолчанию не выполняет никаких действий.

shutdown_error()

void shutdown_error( char const *msg );

Библиотека вызывает данный обработчик в случае возникновения ошибки; библиотека завершает работу, сообщает об ошибке, после вызова данного обработчика. Обработчик по умолчанию не выполняет никаких действий.

shutdown_process()

void shutdown_process( void );

Данный обработчик вызывается для обработки промежуточных событий в процессе завершения работы. Обработчик по умолчанию не выполняет никаких действий.

shutdown_progress()

void shutdown_progress( int done,
int total );

Данный обработчик вызывается для отображения прогресса завершения работы. Аргумент done показывает количество процессов, которые уже были завершены, а также количество всех процессов total.

Обработчик по умолчанию не выполняет никаких действий.

shutdown_prompt()

int shutdown_prompt( char const *name,
pid_t pid );

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

PROMPT_KILL
немедленно сгенерировать сигнал SIGKILL для данного процесса.
PROMPT_WAIT
продолжать ждать сигнала SIGTERM.
PROMPT_SKIP
игнорировать данный процесс, и завершить остальные процессы.
PROMPT_CANCEL
прервать текущее завершение работы системы.

Обработчик по умолчанию возвращает PROMPT_SKIP.

Классификация:

ЗОСРВ «Нейтрино»

Точка остановки потока
Нет
Обработчик прерываний
Нет
Обработчик сигналов
Нет
В потоке
Нет

Тематические ссылки:

phlogin2, phlogin2, phshutdown,

shutdown в Справочнике по Утилитам




Предыдущий раздел: Описание API библиотеки shutdown