Главная » 2017 » Ноябрь » 21 » man 2 reboot
01:30
man 2 reboot

SEO sprint - Всё для максимальной раскрутки!





ИМЯ


reboot - перезагружает систему и разрешает/запрещает использование комбинации
Ctrl-Alt-Del



ОБЗОР


/* Начиная с версии ядра 2.1.30 появились символьные имена LINUX_REBOOT_*
для констант и четвёртый аргумент вызова: */

#include <unistd.h>
#include <linux/reboot.h>

int reboot(int magic, int magic2, int cmd, void *arg);

/* В glibc и в большинстве альтернативных libc (включая uclibc,
deitlibc, musl и других) некоторым константам присвоены
символьные имена RB_*, а библиотечная функция является
обёрткой с одним аргументом вокруг системного вызова: */

#include <unistd.h>
#include <sys/reboot.h>

int reboot(int cmd);



ОПИСАНИЕ


Вызов reboot() перезагружает систему или разрешает/запрещает использование для
перезагрузки специального сочетания клавиш (сокращённо CAD, от комбинации по
умолчанию — Ctrl-Alt-Delete; может быть изменена с помощью loadkeys(1)).

Данный системный вызов завершается с ошибкой (EINVAL), если magic не равен
LINUX_REBOOT_MAGIC1 (0xfee1dead) и magic2 не равен LINUX_REBOOT_MAGIC2
(672274793). Однако, начиная с 2.1.17 в magic2 также можно использовать
LINUX_REBOOT_MAGIC2A (85072278) и начиная с 2.1.97 — LINUX_REBOOT_MAGIC2B
(369367448) и начиная с 2.5.71 — LINUX_REBOOT_MAGIC2C (537993216)
(шестнадцатеричные значения этих констант говорят сами за себя).

Аргумент cmd может принимать следующие значения:

LINUX_REBOOT_CMD_CAD_OFF
(RB_DISABLE_CAD, 0). Запретить использование сочетания клавиш для
перезагрузки системы (CAD). Это означает, что нажатие комбинации клавиш CAD
приведёт к тому, что процессу init (с идентификатором 1) будет послан
сигнал SIGINT, после чего этот процесс может сам решить какие действия
выполнять (возможно, послать сигналы процессам, выполнить команду sync,
reboot).

LINUX_REBOOT_CMD_CAD_ON
(RB_ENABLE_CAD, 0x89abcdef). Разрешить использование сочетания клавиш для
перезагрузки (CAD). Это означает, что нажатие комбинации клавиш CAD
приведёт к немедленному выполнению действия, связанного с
LINUX_REBOOT_CMD_RESTART.

LINUX_REBOOT_CMD_HALT
(RB_HALT_SYSTEM, 0xcdef0123; начиная с Linux 1.1.76) Выводится сообщение
«System halted.» и система останавливается. Управление передается монитору
в ПЗУ, если таковой имеется. Если вызову этой функции не предшествует
sync(2), то данные будут потеряны.

предшествует sync(2), то данные будут потеряны.

LINUX_REBOOT_CMD_RESTART
(RB_AUTOBOOT, 0x1234567) Выводится сообщение «Restarting system.», и по
умолчанию сразу выполняется перезагрузка системы. Если вызову этой функции
не предшествует команда sync(2), то данные будут потеряны.

LINUX_REBOOT_CMD_RESTART2
(0xa1b2c3d4; начиная с Linux 2.1.30) Выводится сообщение «Restarting system
with command '%s'» и немедленно выполняется перезагрузка системы (с
использованием командной строки, заданной в arg). Если вызову этой функции
не предшествует sync(2), то данные будут потеряны.

LINUX_REBOOT_CMD_SW_SUSPEND
(RB_SW_SUSPEND, 0xd000fce1; начиная с Linux 2.5.18) Система переводится в
режим ожидания (suspended, hibernated) на диск. Этот параметр доступен
только, если ядро собрано с параметром CONFIG_HIBERNATION.

Только суперпользователь может вызывать reboot().

Конкретное действие описанных выше команд зависит от архитектуры системы. Что
касается i386, то дополнительный аргумент в данное время ничего не даёт (2.1.122),
а тип перезагрузки можно задать в командной строке ядра ("reboot=..."), определив,
будет ли перезагрузка "тёплой" или "холодной", а также аппаратной или посредством
BIOS.

Поведение внутри пространств имён PID
Начиная с Linux 3.4, если reboot() вызывается из пространства имён PID,
отличающегося от начального пространства имён PID, и и значение cmd равно одному
из перечисленных ниже, то выполняется «перезагрузка» в этом пространстве имён:
процесс «init» пространства имён PID завершается немедленно, что приводит к
результатам, описанным в pid_namespaces(7).

Возможные значения в этом случае, передаваемые в cmd при вызове reboot(),
следующие:

LINUX_REBOOT_CMD_RESTART, LINUX_REBOOT_CMD_RESTART2
Процесс «init» завершается и wait(2) в родительском процессе возвращает,
что поток завершился по сигналу SIGHUP.

LINUX_REBOOT_CMD_POWER_OFF, LINUX_REBOOT_CMD_HALT
Процесс «init» завершается и wait(2) в родительском процессе возвращает,
что поток завершился по сигналу SIGINT.

При других значениях cmd вызов reboot() возвращает -1 и errno присваивается
значение EINVAL.



ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ


При значениях cmd, по которым система останавливается или перезагружается, в
случае успешной работы reboot() ничего не возвращается. При других значений cmd в
случае успешной работы возвращается ноль. При ошибке всегда возвращается -1, а
errno устанавливается в соответствующее значение.



ОШИБКИ


EFAULT Проблема получения данных пользовательского пространства при
LINUX_REBOOT_CMD_RESTART2.



СМОТРИТЕ ТАКЖЕ


systemctl(1), systemd(1), kexec_load(2), sync(2), bootparam(7), capabilities(7),
ctrlaltdel(8), halt(8), shutdown(8)



Категория: (2) Системные вызовы ядра (функции языка Си) | Просмотров: 404 | Добавил: Администратор | Рейтинг: 0.0/0
Всего комментариев: 0
avatar