reboot(2)

NAZWA
reboot - przeładowuje system lub włącza/wyłącza Ctrl-Alt-Del

BIBLIOTEKA
Standardowa biblioteka C (libc, -lc)

SKŁADNIA
/* Od Linuksa 2.1.30 istnieją symboliczne nazwy LINUX_REBOOT_*
    dla stałych oraz czwarty parametr wywołania: */

#include <linux/reboot.h>  /* Definicja stałych LINUX_REBOOT_*/
#include <sys/syscall.h>   /* Definicja stałych SYS_* */
#include <unistd.h>

int syscall(SYS_reboot, int magic, int magic2, int op, void *arg);

/* Pod glibc i większością libc alternatywnych (w tym uclibc, dietlibc,
   musl i kilku innych) niektóre stałe dostały nazwy RB_*, a wywołanie
   biblioteczne jest jednoargumentową funkcją opakowującą
   wywołanie systemowe: */

#include <sys/reboot.h>    /* Definicja stałych RB_* */
#include <unistd.h>

int reboot(int op);

OPIS
Wywołanie reboot() przeładowuje system albo włącza lub wyłącza kombinację klawiszy odpowiedzialną za przeładowanie systemu (nazywaną w skrócie CAD od domyślnej kombinacji Ctrl-Alt-Del, którą można zmienić przy pomocy loadkeys(1)).

To wywołanie systemowe się nie powiedzie (z kodem EINVAL), chyba że magic wynosi LINUX_REBOOT_MAGIC1 (czyli 0xfee1dead) i magic2 jest równe LINUX_REBOOT_MAGIC2 (czyli 0x28121969). Jednakże magic2 może przyjmować dodatkowe wartości: od Linuksa 2.1.17 - LINUX_REBOOT_MAGIC2A (czyli 0x05121996), od Linuksa 2.1.97 - LINUX_REBOOT_MAGIC2B (czyli 0x16041998), a od Linuksa 2.5.71 również LINUX_REBOOT_MAGIC2C (czyli 0x20112000) (szesnastkowe wartości powyższych stałych mają znaczenie).

Parametr op może przyjmować następujące wartości:

LINUX_REBOOT_CMD_CAD_OFF
    (RB_DISABLE_CAD, 0). CAD jest wyłączony, co oznacza, że naciśnięcie kombinacji klawiszy CAD wyśle procesowi init (procesowi nr 1) sygnał SIGINT i ten proces zdecyduje, jaką akcję wykonać (być może: zabicie wszystkich procesów, sync, restart).

LINUX_REBOOT_CMD_CAD_ON
    (RB_ENABLE_CAD, 0x89abcdef). CAD jest włączony, co oznacza, że naciśnięcie klawiszy CAD wywoła od razu akcję skojarzoną z LINUX_REBOOT_CMD_RESTART.

LINUX_REBOOT_CMD_HALT
    (RB_HALT_SYSTEM, 0xcdef0123; od wersji 1.1.76 Linuksa). Wypisywany jest komunikat "System halted.", a system jest zatrzymywany. Kontrola jest przekazywana do monitora ROM, jeżeli istnieje. Jeżeli nie wywołano wcześniej sync(2), niezapisane dane zostaną utracone.

LINUX_REBOOT_CMD_KEXEC
    (RB_KEXEC, 0x45584543, od wersji 2.6.13 Linuksa). Uruchamia jądro załadowane wcześniej za pomocą kexec_load(2). Opcja jest dostępna tylko wtedy, jeśli jądro zostało skonfigurowane z CONFIG_KEXEC.

LINUX_REBOOT_CMD_POWER_OFF
    (RB_POWER_OFF, 0x4321fedc; od wersji 2.1.30 Linuksa). Wypisywany jest komunikat "Power down.", system jest zatrzymywany i jeżeli jest to możliwe, zasilanie jest odłączane. Jeżeli nie wywołano wcześniej sync(2), niezapisane dane zostaną utracone.

LINUX_REBOOT_CMD_RESTART
    (RB_AUTOBOOT, 0x1234567). Wypisywany jest komunikat "Restarting system.", a natychmiast po tym następuje przeładowanie systemu. Jeżeli nie wywołano wcześniej sync(2), niezapisane dane zostaną utracone.

LINUX_REBOOT_CMD_RESTART2
    (0xa1b2c3d4; od wersji 2.1.30 Linuksa). Wypisywany jest komunikat "Restarting system with command '%s'" i natychmiast po nim system jest przeładowywany (używając polecenia podanego w argumencie arg). Jeżeli nie wywołano wcześniej sync(2), niezapisane dane zostaną utracone.

LINUX_REBOOT_CMD_SW_SUSPEND
    (RB_SW_SUSPEND, 0xd000fce1; od wersji 2.5.18 Linuksa). System jest wstrzymywany (hibernowany) na dysk. Opcja jest dostępna tylko wtedy, jeśli jądro zostało skonfigurowane z CONFIG_HIBERNATION.

Tylko administrator może wywołać funkcję reboot().

Dokładny wynik powyższych akcji zależy od architektury komputera. Obecnie (2.1.122) dodatkowy parametr nie ma żadnego znaczenia dla architektury i386, jednakże typ restartowania systemu może być określony w argumentach linii poleceń jądra ("reboot=...") jako restart albo ciepły, albo zimny oraz albo twardy, albo przez BIOS.

  Zachowanie wewnątrz przestrzeni nazw PID
Od Linuksa 3.4, jeśli reboot() jest wywołane z przestrzeni nazw PID innej niż pierwotna przestrzeń nazw PID, z jedną z wartości op podanych poniżej, wykonuje „przeładowanie” tej przestrzeni użytkownika: proces „init” przestrzeni użytkownika PID jest natychmiast kończony, z wszystkimi tego konsekwencjami, opisanymi w podręczniku pid_namespaces(7).

Wartości, jakie można podać w op, przy wywoływaniu reboot() w takiej sytuacji to:

LINUX_REBOOT_CMD_RESTART
LINUX_REBOOT_CMD_RESTART2
    Proces „init” jest kończony, a wywołanie wait(2) w procesie macierzystym zgłasza, że potomek został zabity sygnałem SIGHUP.

LINUX_REBOOT_CMD_POWER_OFF
LINUX_REBOOT_CMD_HALT
    Proces „init” jest kończony, a wywołanie wait(2) w procesie macierzystym zgłasza, że potomek został zabity sygnałem SIGINT.

W przypadku odmiennych wartości op, reboot() zwraca -1 i ustawia errno na EINVAL.

WARTOŚĆ ZWRACANA
Jeśli podano wartość op powodującą zatrzymanie lub zrestartowanie systemu, to reboot() nie powraca. W przypadku innych wartości parametru op zwracane jest zero, jeśli funkcja zakończyła się powodzeniem. We wszystkich przypadkach (niezależnie od wartości op) w razie wystąpienia błędu zwracane jest -1 ustawiane errno wskazując błąd.

BŁĘDY

EFAULT
    Problem pobierania danych z przestrzeni użytkownika w wypadku wywołania LINUX_REBOOT_CMD_RESTART2.

EINVAL
    Niepoprawne: liczby magiczne lub op.

EPERM
    Proces wywołujący nie ma odpowiednich uprawnień, aby wywołać reboot(); wymagane jest posiadanie przywileju CAP_SYS_BOOT (ang. capability) w swojej przestrzeni nazw użytkownika.

STANDARDY
Linux.

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

TŁUMACZENIE
Tłumaczenie niniejszej strony podręcznika: Robert Luberda <robert@debian.org> i Michał Kułach <michal.kulach@gmail.com>

Niniejsze tłumaczenie jest wolną dokumentacją. Bliższe informacje o warunkach licencji można uzyskać zapoznając się z GNU General Public License w wersji 3 (https://www.gnu.org/licenses/gpl-3.0.html) lub nowszej. Nie przyjmuje się ŻADNEJ ODPOWIEDZIALNOŚCI.

Błędy w tłumaczeniu strony podręcznika prosimy zgłaszać na adres listy dyskusyjnej manpages-pl-list@lists.sourceforge.net.