reboot -
перезагружает
систему и
разрешает/запрещает
использование
комбинации
Ctrl-Alt-Del
Standard C library (
libc,
-lc)
/* Since Linux 2.1.30 there are symbolic names LINUX_REBOOT_*
for the constants and a fourth argument to the call: */
#include <linux/reboot.h> /* определения констант LINUX_REBOOT_* */
#include <sys/syscall.h> /* определения констант SYS_* */
#include <unistd.h>
int syscall(SYS_reboot, int magic, int magic2, int cmd, void *arg);
/* В glibc и в большинстве альтернативных libc (включая uclibc,
deitlibc, musl и других) некоторым константам присвоены
символьные имена RB_*, а библиотечная функция является
обёрткой с одним аргументом вокруг системного вызова: */
#include <sys/reboot.h> /* определения констант RB_* */
#include <unistd.h>
int reboot(int cmd);
Вызов
reboot()
перезагружает
систему
или
разрешает/запрещает
использование
для
перезагрузки
специального
сочетания
клавиш
(сокращённо
CAD, от
комбинации
по
умолчанию
— Ctrl-Alt-Delete; может
быть
изменена с
помощью
loadkeys(1)).
This system call fails (with the error
EINVAL) unless
magic equals
LINUX_REBOOT_MAGIC1 (that is, 0xfee1dead) and
magic2 equals
LINUX_REBOOT_MAGIC2 (that is, 0x28121969). However, since Linux 2.1.17
also
LINUX_REBOOT_MAGIC2A (that is, 0x05121996) and since Linux 2.1.97
also
LINUX_REBOOT_MAGIC2B (that is, 0x16041998) and since Linux 2.5.71
also
LINUX_REBOOT_MAGIC2C (that is, 0x20112000) are permitted as values
for
magic2. (The hexadecimal values of these constants are meaningful.)
Аргумент
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), то
данные
будут
потеряны.
- LINUX_REBOOT_CMD_KEXEC
- (RB_KEXEC, 0x45584543,
начиная с Linux
2.6.13)
Выполняет
ядро,
которое
было
загружено
ранее с
помощью
kexec_load(2). Этот
параметр
доступен
только,
если ядро
собрано с
параметром
CONFIG_KEXEC.
- LINUX_REBOOT_CMD_POWER_OFF
- (RB_POWER_OFF, 0x4321fedc;
начиная с Linux
2.1.30)
Выводится
сообщение
«Power down.»,
система
останавливается,
и у системы
отключаются
все
источники
питания,
если это
возможно.
Если
вызову
этой
функции не
предшествует
sync(2), то
данные
будут
потеряны.
- LINUX_REBOOT_CMD_RESTART
- (RB_AUTOBOOT, 0x1234567)
Выводится
сообщение
«Restarting system.», и по
умолчанию
сразу
выполняется
перезагрузка
системы.
Если
вызову
этой
функции не
предшествует
команда sync(2),
то данные
будут
потеряны.
- LINUX_REBOOT_CMD_RESTART2
- (0xa1b2c3d4; since Linux 2.1.30). The message
"Restarting system with command '%s'" is printed, and a restart
(using the command string given in arg) is performed immediately.
If not preceded by a sync(2), data will be lost.
- LINUX_REBOOT_CMD_SW_SUSPEND
- (RB_SW_SUSPEND, 0xd000fce1;
начиная с Linux
2.5.18) Система
переводится
в режим
ожидания
(suspended, hibernated) на диск.
Этот
параметр
доступен
только,
если ядро
собрано с
параметром
CONFIG_HIBERNATION.
Только
суперпользователь
может
вызывать
reboot().
Конкретное
действие
описанных
выше
команд
зависит от
архитектуры
системы.
Что
касается i386,
то
дополнительный
аргумент в
данное
время
ничего не
даёт (2.1.122), а тип
перезагрузки
можно
задать в
командной
строке
ядра ("reboot=..."),
определив,
будет ли
перезагрузка
"тёплой"
или
"холодной",
а также
аппаратной
или
посредством
BIOS.
Начиная с 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.
For the values of
cmd that stop or restart the system, a successful call
to
reboot() does not return. For the other
cmd values, zero is
returned on success. In all cases, -1 is returned on failure, and
errno
is set to indicate the error.
- EFAULT
- Проблема
получения
данных
пользовательского
пространства
при LINUX_REBOOT_CMD_RESTART2.
- EINVAL
- Неправильные
идентификационные
числа или
cmd.
- EPERM
- Вызывающий
процесс не
имеет
достаточно
прав для
вызова reboot();
вызывающий
должен
иметь
мандат CAP_SETGID
в своём
пользовательском
пространстве
имён.
Вызов
reboot()
есть
только в Linux, и
он не
должен
использоваться
в
переносимых
программах.
systemctl(1),
systemd(1),
kexec_load(2),
sync(2),
bootparam(7),
capabilities(7),
ctrlaltdel(8),
halt(8),
shutdown(8)
Русский
перевод
этой
страницы
руководства
был сделан
aereiae <
[email protected]>, Azamat Hackimov
<
[email protected]>, Dmitriy S. Seregin <
[email protected]>,
Katrin Kutepova <
[email protected]>, Lockal
<
[email protected]>, Yuri Kozlov <
[email protected]>,
Баринов
Владимир и
Иван
Павлов <
[email protected]>
Этот
перевод
является
бесплатной
документацией;
прочитайте
Стандартную
общественную
лицензию GNU
версии 3
или более
позднюю,
чтобы
узнать об
условиях
авторского
права. Мы не
несем
НИКАКОЙ
ОТВЕТСТВЕННОСТИ.
Если вы
обнаружите
ошибки в
переводе
этой
страницы
руководства,
пожалуйста,
отправьте
электронное
письмо на
[email protected]