手机无法关机怎么回事? 苹果Mac系统关机很慢该怎么办

目前来说, 造成关机慢的主要原因可以分为OS X系统本身问题和应用软件问题 。 这两个的本质区别在于, 前者造成系统退出后屏幕出现“旋转齿轮”(Spinning Gear, 俗称无限菊花, 甚至有人数圈数, 称之20圈菊花等等)并等待很长时间, 而后者是在系统退出之前, 系统尝试退出所有当前运行中的程序的过程, 说得更具体点就是, launchd本身退出之时(系统问题)或之前(应用软件问题) 。 应用软件问题我们这里无法给出任何的答案, Apple也无能为力 。 我们主要是讨论系统问题 。
在后面我们给出一个靠谱的解决方案之前, 我们来看看对一个系统问题应该如何入手 。 当我们去分析大家解决问题的思路的时候可以发现, 有这样几个大致思路, 有的从硬件入手, 比如重置PRAM和SMC, 内存等方法;有的是根据以往的解决大多数问题的思路开始着手, 比如建议修复权限、禁止启动项等就是这个思路;有的是碰机会, 比如关Wifi等 。 其实, 他们都有可能, 但是都没有抓住一个基本有效的方法 。 对于Troubleshooting的手段来说, 几乎所有有经验的程序开发人员/系统管理人员等都会想到, 系统日志logs, 检查系统日志是排除故障的一大利器, 尤其是系统级别的 。 其实早有网友就注意从这方面着手, 可惜有点偏了没有找到重点 。
1、要抓住重点, 还要从系统的内部管理来说 。 OS X系统启动的基本步骤是这样的:
– 通电, Boot-ROM进行初始化 。
– Boot-ROM后处理, 此时是黑屏, 电源LED灯亮, 如果出现任何错误, LED灯会有规律闪动 。
– 开始调用EFI:会听到咚的那一个长音 。
– EFI启动:会响应用户键盘, 比如进入单用户模式等按键 。 正常情况下, 读取boot.efi正常后, 出现银色的Apple标识 。
– 启动内核:看到灰色背景和旋转齿轮 。 从这里开始, 就可以从Activity Monitor程序中找到各个进程的关系了 。
– 启动launchd:此时看到蓝屏 。 launchd负责启动和管理系统的各个服务
– login窗口出现:
– 用户登录:用户登录后, 系统也是使用另外一个launchd来为该用户开启用户环境的, 之后, 用户的所有动作(除非特殊情况), 都在这第二个launchd的管理之下 。
2、现在让我们开启在/Applications/Utilities目录中的Activity Monitor程序, 选择All Process, Hierarchically, 如下图, 就可以看到各个进程之间的关系 。 核心总是占用任务ID 0的, 而第一个launchd总是ID 1, 用户launchd(下图中的ID 154)是ID 1的进程子进程 。

手机无法关机怎么回事? 苹果Mac系统关机很慢该怎么办

文章插图

3、既然启动是这个过程, 那么退出/关机就是一个反过程 。 先关闭用户环境, 就是用户launchd的退出过程;之后是系统退出过程, 也就是ID 1的launchd的退出过程 。 所以, 系统关闭慢的原因, 应该是ID 1的launchd在关闭各个由他负责关闭的某个/某些服务的退出延迟造成的 。 当我们了解了这些之后, 就可以着手分析了 。
如何找到哪个服务进程退出延迟了呢?这就要看日志了, 打开Console程序, 在左边找到/var/log >> com.apple.launchd >> launchd-shutdown.system.log, 之后, 在右上角的查找中, 输入timeout, 就会出现如下图的画面, 改图这是我修改之后的截图, 在修改之前, 两个服务的timeout时间, applevents是20 seconds, securityd是15秒 。
手机无法关机怎么回事? 苹果Mac系统关机很慢该怎么办

文章插图

4、这就找到了系统关闭奇慢的真正原因了, launchd给各个服务发出SIGKILL信号后, 等待所有服务都退出后, 才能退出, 而由于一些服务退出超时, 就造成整个系统关闭放慢 。 至于, 这些服务为什么/什么情况下出现退出异常超时以及如何彻底解决之, 我们只有让Apple的系统开发人员处理了, 我们无从修复, 不过我们可以通过给他设定退出超时时长来改变一下它的行为, 这就需要一点对plist文件的知识了, 具体的系统(launchd)如何定义和解读plist文件, 我们不进行深入探讨, 只给出方法, 有兴趣的可以去developer.apple.com去读相关的文档 。


特别声明:本站内容均来自网友提供或互联网,仅供参考,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。