reboot(2) - wariua/manpages-ko GitHub Wiki

NAME

reboot - μž¬λΆ€νŒ… ν•˜κΈ° λ˜λŠ” Ctrl-Alt-Del 켜기/끄기

SYNOPSIS

/* 컀널 버전 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, dietlibc, musl λ“±)μ—μ„œλŠ”
   κ΄€λ ¨ μƒμˆ˜ 일뢀가 RB_*λΌλŠ” 심볼 이름을 κ°€μ§€κ³  있으며 라이브러리
   호좜이 인자 1개짜리 μ‹œμŠ€ν…œ 호좜 λž˜νΌμ΄λ‹€. */

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

int reboot(int cmd);

DESCRIPTION

reboot() ν˜ΈμΆœμ€ μ‹œμŠ€ν…œμ„ μž¬λΆ€νŒ… ν•˜κ±°λ‚˜, μž¬λΆ€νŒ… ν‚€ μž…λ ₯(기본적으둜 Ctrl-Alt-Deleteμ΄λ―€λ‘œ CAD둜 μ€„μž„. loadkeys(1)둜 λ°”κΏ€ 수 있음)을 μΌœκ±°λ‚˜ λˆλ‹€.

magic이 LINUX_REBOOT_MAGIC1(즉 0xfee1dead)κ³Ό κ°™κ³  magic2κ°€ LINUX_REBOOT_MAGIC2(즉 672274793)와 κ°™μ•„μ•Ό ν•œλ‹€. μ•„λ‹ˆλ©΄ 이 μ‹œμŠ€ν…œ 호좜이 (EINVAL 였λ₯˜λ‘œ) μ‹€νŒ¨ν•œλ‹€. ν•˜μ§€λ§Œ magic2의 κ°’μœΌλ‘œ 2.1.17λΆ€ν„° LINUX_REBOOT_MAGIC2A(즉 85072278)도, 2.1.97λΆ€ν„° LINUX_REBOOT_MAGIC_2B(즉 369367448)도, 2.5.71λΆ€ν„° LINUX_REBOOT_MAGIC2C(즉 537993216)도 ν—ˆμš©ν•œλ‹€. (이 μƒμˆ˜λ“€μ˜ 16μ§„μˆ˜ κ°’μ—λŠ” μ˜λ―Έκ°€ μžˆλ‹€.)

cmd μΈμžλŠ” λ‹€μŒ 값을 κ°€μ§ˆ 수 μžˆλ‹€.

LINUX_REBOOT_CMD_CAD_OFF
(RB_DISABLE_CAD, 0). CADλ₯Ό λˆλ‹€. 그러면 CAD ν‚€ μž…λ ₯ μ‹œ init(1번 ν”„λ‘œμ„ΈμŠ€)μ—κ²Œ SIGINT μ‹œκ·Έλ„μ΄ κ°€κ³ , κ·Έ ν”„λ‘œμ„ΈμŠ€μ—μ„œ μ μ ˆν•œ λ™μž‘(μ•„λ§ˆλ„ λͺ¨λ“  ν”„λ‘œμ„ΈμŠ€ 죽이고, sync ν•˜κ³ , μž¬λΆ€νŒ… ν•˜κΈ°)을 μ •ν•  수 μžˆλ‹€.
LINUX_REBOOT_CMD_CAD_ON
(RB_ENABLE_CAD, 0x89abcdef). CADλ₯Ό μΌ λ‹€. 그러면 CAD ν‚€ μž…λ ₯ μ‹œ μ¦‰μ‹œ LINUX_REBOOT_CMD_RESTART에 λŒ€μ‘ν•˜λŠ” λ™μž‘μ΄ 이뀄진닀.
LINUX_REBOOT_CMD_HALT
(RB_HALT_SYSTEM, 0xcdef0123, λ¦¬λˆ…μŠ€ 1.1.76λΆ€ν„°). "System halted." λ©”μ‹œμ§€λ₯Ό μ°κ³ μ„œ μ‹œμŠ€ν…œμ„ λ©ˆμΆ˜λ‹€. ROM λͺ¨λ‹ˆν„°κ°€ 있으면 그리둜 μ œμ–΄κ°€ κ°„λ‹€. 미리 sync(2) ν•˜μ§€ μ•Šμ•˜μœΌλ©΄ 데이터가 μœ μ‹€λœλ‹€.
LINUX_REBOOT_CMD_KEXEC
(RB_KEXEC, 0x45584543, λ¦¬λˆ…μŠ€ 2.6.13λΆ€ν„°). kexec_load(2)둜 미리 μ μž¬ν•΄ λ‘” 컀널을 μ‹€ν–‰ν•œλ‹€. 컀널이 CONFIG_KEXEC둜 κ΅¬μ„±λœ κ²½μš°μ—λ§Œ 이 μ˜΅μ…˜μ„ μ“Έ 수 μžˆλ‹€.
LINUX_REBOOT_CMD_POWER_OFF
(RB_POWER_OFF, 0x4321fedc, λ¦¬λˆ…μŠ€ 2.1.30λΆ€ν„°). "Power down." λ©”μ‹œμ§€λ₯Ό μ°κ³ μ„œ μ‹œμŠ€ν…œμ„ λ©ˆμΆ”κ³ , κ°€λŠ₯ν•œ 경우 μ‹œμŠ€ν…œμ˜ 전원을 λͺ¨λ‘ μ œκ±°ν•œλ‹€. 미리 sync(2) ν•˜μ§€ μ•Šμ•˜μœΌλ©΄ 데이터가 μœ μ‹€λœλ‹€.
LINUX_REBOOT_CMD_RESTART
(RB_AUTOBOOT, 0x1234567). "Restarting system." λ©”μ‹œμ§€λ₯Ό μ°κ³ μ„œ μ¦‰μ‹œ κΈ°λ³Έ μž¬μ‹œμž‘ λ™μž‘μ„ μˆ˜ν–‰ν•œλ‹€. 미리 sync(2) ν•˜μ§€ μ•Šμ•˜μœΌλ©΄ 데이터가 μœ μ‹€λœλ‹€.
LINUX_REBOOT_CMD_RESTART2
(0xa1b2c3d4, λ¦¬λˆ…μŠ€ 2.1.30λΆ€ν„°). "Restarting system with command '%s'" λ©”μ‹œμ§€λ₯Ό μ°κ³ μ„œ μ¦‰μ‹œ (arg에 μ€€ λͺ…λ Ή λ¬Έμžμ—΄μ„ μ‚¬μš©ν•΄) μž¬μ‹œμž‘μ„ μˆ˜ν–‰ν•œλ‹€. 미리 sync(2) ν•˜μ§€ μ•Šμ•˜μœΌλ©΄ 데이터가 μœ μ‹€λœλ‹€.
LINUX_REBOOT_CMD_SW_SUSPEND
(RB_SW_SUSPEND, 0xd000fce1, λ¦¬λˆ…μŠ€ 2.5.18λΆ€ν„°). μ‹œμŠ€ν…œμ„ λ””μŠ€ν¬μ— μ €μž₯ν•˜κ³  쀑지(ν•˜μ΄λ²„λ„€μ΄μ…˜)ν•œλ‹€. 컀널이 CONFIG_HIBERNATION으둜 κ΅¬μ„±λœ κ²½μš°μ—λ§Œ 이 μ˜΅μ…˜μ„ μ“Έ 수 μžˆλ‹€.

μˆ˜νΌμœ μ €λ§Œ reboot()λ₯Ό ν˜ΈμΆœν•  수 μžˆλ‹€.

μœ„ λ™μž‘λ“€μ˜ μ •ν™•ν•œ νš¨κ³ΌλŠ” μ•„ν‚€ν…μ²˜μ— 따라 λ‹€λ₯Ό 수 μžˆλ‹€. i386 μ•„ν‚€ν…μ²˜μ—μ„œ μΆ”κ°€ μΈμžλŠ” (2.1.122) ν˜„μž¬ 아무 역할도 ν•˜μ§€ μ•ŠμœΌλ©° 컀널 λͺ…λ Ήν–‰ 인자("reboot=...")둜 μž¬λΆ€νŒ…μ΄ μ›œκ³Ό μ½œλ“œ 쀑 μ–΄λŠ μͺ½μ΄μ–΄μ•Ό ν•˜λŠ”μ§€, ν•˜λ“œμΈμ§€ BIOSλ₯Ό 거쳐야 ν•˜λŠ”μ§€ μ •ν•  수 μžˆλ‹€.

PID λ„€μž„μŠ€νŽ˜μ΄μŠ€ λ‚΄ λ™μž‘ 방식

λ¦¬λˆ…μŠ€ 3.4λΆ€ν„°λŠ” κΈ°λ³Έ PID λ„€μž„μŠ€νŽ˜μ΄μŠ€ μ•„λ‹Œ PID λ„€μž„μŠ€νŽ˜μ΄μŠ€μ—μ„œ μ•„λž˜ λ‚˜μ—΄ν•œ cmd κ°’λ“€ 쀑 ν•˜λ‚˜λ‘œ reboot()λ₯Ό ν˜ΈμΆœν•˜λ©΄ κ·Έ λ„€μž„μŠ€νŽ˜μ΄μŠ€μ˜ "μž¬λΆ€νŒ…"을 μˆ˜ν–‰ν•œλ‹€. 즉 κ·Έ PID λ„€μž„μŠ€νŽ˜μ΄μŠ€μ˜ "init" ν”„λ‘œμ„ΈμŠ€κ°€ μ¦‰μ‹œ μ’…λ£Œλ˜λŠ”λ° pid_namespaces(7)μ—μ„œ κ·Έ 효과λ₯Ό μ„€λͺ…ν•œλ‹€.

이 경우 reboot() 호좜 μ‹œ cmd에 쀄 수 μžˆλŠ” 값듀은 λ‹€μŒκ³Ό κ°™λ‹€.

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둜 μ„€μ •ν•œλ‹€.

RETURN VALUE

μ‹œμŠ€ν…œμ„ λ©ˆμΆ”κ±°λ‚˜ μž¬μ‹œμž‘ν•˜λŠ” cmd κ°’λ“€μ—μ„œλŠ” μ„±κ³΅ν•œ reboot() 호좜이 λ°˜ν™˜ν•˜μ§€ μ•ŠλŠ”λ‹€. λ‹€λ₯Έ cmd κ°’λ“€μ—μ„œλŠ” 성곡 μ‹œ 0을 λ°˜ν™˜ν•œλ‹€. λͺ¨λ“  κ²½μš°μ—μ„œ μ‹€νŒ¨ μ‹œ -1을 λ°˜ν™˜ν•˜λ©° errnoλ₯Ό 적절히 μ„€μ •ν•œλ‹€.

ERRORS

EFAULT
LINUX_REBOOT_CMD_RESTART2μ—μ„œ μ‚¬μš©μž 곡간 데이터λ₯Ό κ°€μ Έμ˜€λŠ” 데 문제 λ°œμƒ.
EINVAL
맀직 λ„˜λ²„λ‚˜ cmd 잘λͺ»λ¨.
EPERM
호좜 ν”„λ‘œμ„ΈμŠ€κ°€ reboot()λ₯Ό ν˜ΈμΆœν•  μΆ©λΆ„ν•œ νŠΉκΆŒμ„ κ°€μ§€κ³  μžˆμ§€ μ•ŠμŒ. ν˜ΈμΆœμžκ°€ 자기 μ‚¬μš©μž λ„€μž„μŠ€νŽ˜μ΄μŠ€ λ‚΄μ—μ„œ CAP_SYS_BOOTλ₯Ό κ°€μ§€κ³  μžˆμ–΄μ•Ό ν•œλ‹€.

CONFORMING TO

reboot()λŠ” λ¦¬λˆ…μŠ€ μ „μš©μ΄λ―€λ‘œ 이식성이 μžˆμ–΄μ•Ό ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ—μ„œλŠ” μ‚¬μš©ν•˜μ§€ 말아야 ν•œλ‹€.

SEE ALSO

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


2019-03-06

⚠️ **GitHub.com Fallback** ⚠️