> For the complete documentation index, see [llms.txt](https://man.bsdcn.org/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://man.bsdcn.org/sys/reboot.2.md).

# reboot(2)

`reboot` — 重启系统或停止处理器

## 名称

`reboot`

## 库

Lb libc

## 概要

`#include <unistd.h>`

`#include <sys/reboot.h>`

```c
int
reboot(int howto);
```

## 描述

`reboot()` 系统调用重启系统。只有超级用户可以按需重启机器。但是，在发生不可恢复的系统故障时，会自动调用重启。

`howto` 参数是选项的掩码；系统调用接口允许将以下选项（定义于头文件 `#include <sys/reboot.h>` 中）传递给新内核或新的引导和 init 程序。

**`RB_AUTOBOOT`** 默认值，使系统以通常方式重启。

**`RB_ASKNAME`** 通常，仅当加载器指定的根文件系统出现错误时，系统才会提示用户。此标志强制系统始终提示用户输入根分区。

**`RB_DFLTROOT`** 使用编译时内建的根设备。通常，如果可能，系统使用启动它的设备作为根设备。（默认行为取决于引导程序确定其加载来源驱动器的能力，并非所有系统都支持。）

**`RB_DUMP`** 重启前转储内核内存；更多信息请参见 savecore(8)。

**`RB_HALT`** 处理器直接停止；不进行重启。应谨慎使用此选项。

**`RB_POWERCYCLE`** 停止后，关机代码将尽其所能切断电源，然后再重新接通电源。这需要硬件支持，通常是能够控制电源序列的辅助微处理器。目前仅有 [ipmi(4)](/man4/ipmi.4.md) 驱动实现了此功能。

**`RB_POWEROFF`** 停止后，关机代码将尽其所能切断电源。这需要硬件支持。

**`RB_KDB`** 加载符号表并启用系统内建调试器。如果内核未配置调试功能，此选项无实际作用。与此选项组合时，若干其他选项具有不同含义，但通过 `reboot()` 系统调用可能无法使用。更多信息请参见 [ddb(4)](/man4/ddb.4.md)。

**`RB_NOSYNC`** 通常，在停止或重启处理器之前会同步磁盘（参见 sync(8)）。如果手动修改了文件系统或处理器起火，此选项可能有用。

**`RB_REROOT`** 不重启，而是卸载除包含当前运行可执行文件之外的所有文件系统，并使用与正常启动时相同的机制（基于 vfs.root.mountfrom [kenv(1)](/man1/kenv.1.md) 变量）挂载根文件系统。

**`RB_RDONLY`** 初始以只读方式挂载根文件系统。目前这是默认行为，此选项已弃用。

**`RB_SINGLE`** 通常，重启过程涉及自动磁盘一致性检查，然后进入多用户操作。`RB_SINGLE` 阻止这一过程，使系统启动到控制台上的单用户 shell。`RB_SINGLE` 实际上由新启动系统中的 [init(8)](/man8/init.8.md) 程序解释。

**`RB_KEXEC`** 执行通过 `kexec_load()` 加载的新内核。如果未加载内核，则正常重启。

当未给定选项（即使用 `RB_AUTOBOOT`）时，系统从以处理器特定方式选择的磁盘 0 号单元的根文件系统中的 “kernel” 文件重启。通常会自动执行磁盘一致性检查（参见 fsck(8)）。

## 返回值

如果成功，此调用永远不会返回。否则，返回 -1，并在全局变量 `errno` 中返回错误。

## 错误

**\[`EPERM`]** 调用者不是超级用户。

## 参见

[kexec\_load(2)](/sys/kexec_load.2.md), [crash(8)](/man8/crash.8.md), [halt(8)](/man8/reboot.8.md), [init(8)](/man8/init.8.md), [reboot(8)](/man8/reboot.8.md), savecore(8), reboot(9)

## 历史

`reboot()` 系统调用首次出现于 4.0BSD。
