REBOOT(2) | Руководство программиста Linux | REBOOT(2) |
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 может принимать следующие значения:
Только суперпользователь может вызывать reboot().
Конкретное действие описанных выше команд зависит от архитектуры системы. Что касается i386, то дополнительный аргумент в данное время ничего не даёт (2.1.122), а тип перезагрузки можно задать в командной строке ядра ("reboot=..."), определив, будет ли перезагрузка "тёплой" или "холодной", а также аппаратной или посредством BIOS.
Начиная с Linux 3.4, если reboot() вызывается из пространства имён PID, отличающегося от начального пространства имён PID, и и значение cmd равно одному из перечисленных ниже, то выполняется «перезагрузка» в этом пространстве имён: процесс «init» пространства имён PID завершается немедленно, что приводит к результатам, описанным в pid_namespaces(7).
Возможные значения в этом случае, передаваемые в cmd при вызове reboot(), следующие:
При других значениях cmd вызов reboot() возвращает -1 и errno присваивается значение EINVAL.
При значениях cmd, по которым система останавливается или перезагружается, в случае успешной работы reboot() ничего не возвращается. При других значений cmd в случае успешной работы возвращается ноль. При ошибке всегда возвращается -1, а errno устанавливается в соответствующее значение.
Вызов reboot() есть только в Linux, и он не должен использоваться в переносимых программах.
systemctl(1), systemd(1), kexec_load(2), sync(2), bootparam(7), capabilities(7), ctrlaltdel(8), halt(8), shutdown(8)
2019-03-06 | Linux |