如何从初始PID命名空间以外的PID命名空间和初始PID命名空间调用reboot()?

问题描述 投票:0回答:1

manpage of reboot()

PID名称空间内的行为

从Linux 3.4开始,如果从PID命名空间调用reboot(),则从其他位置调用 比使用列出的cmd值之一的初始PID命名空间 在下面,它执行该命名空间的“重启”:“init”进程 PID命名空间的效果立即终止 在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。

阅读its manpage后,我对PID命名空间的了解有限。我想知道如何调用reboot()

  • 从初始PID命名空间以外的PID命名空间,和
  • 从最初的PID命名空间?
linux reboot
1个回答
1
投票

您可以使用nsenter进入其他PID。要从初始PID名称空间以外的PID执行重新引导:

/usr/bin/nsenter -m/proc/PID/ns/mnt reboot

如果目标PID为1:

/usr/bin/nsenter -m/proc/1/ns/mnt reboot

第二个问题与简单地调用reboot相同,因为它将获得当前的PID上下文。

© www.soinside.com 2019 - 2024. All rights reserved.