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()
您可以使用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上下文。