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()
谢谢。
答案 0 :(得分:0)
您可以使用nsenter进入其他PID。 要从初始PID名称空间以外的PID执行重新引导,请执行以下操作:
TreeSet<Sorted> t1 = new TreeSet<>(Comparator.comparingInt(s -> s.num));
如果目标PID为1:
/usr/bin/nsenter -m/proc/PID/ns/mnt reboot
第二个问题与简单地调用/usr/bin/nsenter -m/proc/1/ns/mnt reboot
相同,因为它将获得当前的PID上下文。