理论
简而言之,有一种记录在案的man launchctl
方式可以完成无内核重启的单模式切换。例如,可以使用SHELL命令从“终端”窗口进行部署:
sudo launchctl reboot userspace -s
实践
埃尔卡皮坦
我在工作于Macbook Air 2015的El Capitan上对其进行了测试。但是我也收到用户的报告说,他对El Capitan的尝试虽然没有成功。我能想到的唯一区别是Retina,它需要不同的图形模式或类似的模式。我没有Macbook,而Retina运行的是El Capitan,因此暂时我无法说出更多支持该版本的信息。
莫哈韦高山脉
我对High Sierra的尝试表明该功能不再起作用(与El Capitan相比)。再说一次,可能是由于视网膜引起的,目前尚不清楚。莫哈韦沙漠(Mojave)也不起作用。
贡献者的详尽解释¹
有一种方法可以从运行中的macOS恢复到单用户模式,而无需通过运行完全重启
sudo launchctl reboot userspace -s
这将仅重新启动macOS的用户空间部分,而无需重新启动Darwin内核,这等效于更改旧版UNIX上的运行级别。
有关更多详细信息,请参见man launchctl
:
reboot [system|userspace|halt|logout|apps|reroot ]
Instructs launchd to begin tearing down userspace. With no argu-
ment given or with the system argument given, launchd will make
the reboot(2) system call when userspace has been completely
torn down. With the halt argument given, launchd will make the
reboot(2) system call when userspace has been completely torn
down and pass the RB_HALT flag, halting the system and not ini-
tiating a reboot.
With the userspace argument given, launchd will re-exec itself
when userspace has been torn down and bring userspace back up.
This is useful for rebooting the system quickly under conditions
where kernel data structures or hardware do not need to be re-
initialized.
-s When rebooting the machine (either a full reboot or
userspace reboot), brings the subsequent boot session
up in single-user mode.
这意味着在技术层面sudo launchctl reboot userspace -s
上不会调用reboot(2)
,因此提供了一种无需重启即可切换到单用户模式的方法。
维基百科上有关单用户模式的文章还说:
在OS X El Capitan和更高版本的macOS中,可以使用sudo launchctl reboot userspace -s
Terminal中的命令将模式转换为单用户模式,并可以使用Command以单用户模式完全重启系统sudo launchctl reboot system -s
。
1 —由@ nohillside提供
sudo launchctl reboot userspace -s
形成成功和可用的用户空间。重启!简而言之,无论文档的来源如何,上述命令均无效,并且不起作用,因此,无论该问题的答案是否被接受,我都认为它没有用,这是我投反对票的原因。