Mac下的启动服务主要有三个地方可配置:
1,系统偏好设置->帐户->登陆项
2,/System/Library/StartupItems 和 /Library/StartupItems/
3,launchd 系统初始化进程配置。

前两种优化比较简单,本文主要介绍的是第三种更为复杂的launchd配置优化。launchd是Mac OS下,用于初始化系统环境的关键进程。类似Linux下的init, rc。

我们先来看一下Mac OS X的启动原理:
1,mac固件激活,初始化硬件,加载BootX引导器。
2,BootX加载内核与内核扩展(kext)。
3,内核启动launchd进程。
4,launchd根据  /System/Library/LaunchAgents , /System/Library/LaunchDaemons ,  /Library/LaunchDaemons, Library/LaunchAgents , ~/Library/LaunchAgents 里的plist配置,启动服务守护进程。

看完了Mac OS X的启动原理,我们不难发觉 /System/Library/LaunchAgents , /System/Library/LaunchDaemons ,  /Library/LaunchDaemons, Library/LaunchAgents 五个目录下的plist属性文件是优化系统的关键。

下面再来理解几个基础概念:

/System/Library和/Library和~/Library目录的区别?
/System/Library目录是存放Apple自己开发的软件。
/Library目录是系统管理员存放的第三方软件。~/Library/是用户自己存放的第三方软件。

LaunchDaemons和LaunchAgents的区别?
LaunchDaemons是用户未登陆前就启动的服务(守护进程)。
LaunchAgents是用户登陆后启动的服务(守护进程)。

开始优化
禁用服务,我们需要用到Mac OS提供的一个工具指令-launchctl
launchctl 指令会针对服务设置一个禁用标志,launchd启动时会先检查这个服务是否被禁用,从而确定是否需要启用这个服务。

禁用服务的方法1
先找到禁用标志文件 /var/db/launchd.db/com.apple.launchd/overrides.plist,查看你要禁用的服务是否已被禁用了。
有些服务已被禁用,但未列在overrides.plist里。此时,你还需要检查这个服务的plist文件Label字段是否已经标记为 Disable。

确认这个服务未禁用后,我们就可以通过调用如下命令,来禁用服务:
sudo launchctl unload plist文件路径
sudo launchctl unload -w plist文件路径
比如,我想禁用spotlight,则输入
sudo launchctl unload /System/Library/LaunchAgents/com.apple.Spotlight.plist
sudo launchctl unload -w /System/Library/LaunchAgents/com.apple.Spotlight.plist
禁用完服务以后,重启Mac OS即可生效。

禁用服务的方法2,一种更有效且暴力的方法(推荐)
先卸载服务
sudo launchctl unload /System/Library/LaunchAgents/com.apple.Spotlight.plist
然后将plist文件mv到其他目录备份。
sudo mv /System/Library/LaunchAgents/com.apple.Spotlight.plist ~/launchd.bak
重启。搞定。是不是很简单!

我个人比较喜欢这种禁用服务的方式,所以推荐一下。

最后,如果发现服务禁用后,系统或软件出现异常,可以通过如下命令,还原服务:
方法1:
sudo launchctl load -wF plist文件路径
方法2:
将备份的plist文件mv回原来的文件夹。
sudo launchctl load plist文件路径

注意:系统级服务的禁用要异常小心,请在禁用前google,确保你熟知这个服务的作用。否则可能导致系统无法启动。
最安全的做法就是不要去禁用它了。
当然,用户服务我们还是可以放心禁用的,有问题最多再启用呗。

下面是我禁用的服务列表:
/System/Library/LaunchDaemons/com.apple.metadata.mds.plist (禁用spotlight的前提)
/System/Library/LaunchAgents/com.apple.Spotlight.plist (Spotlight)
/Library/LaunchDaemons/com.google.keystone.daemon.plist  (Google Software Update)
/Library/LaunchAgents/com.google.keystone.root.agent  (Google Software Update)
~/Library/LaunchAgents/com.google.keystone.agent.plist (Google Software Update,用户下的进程不需要加 sudo)
~/Library/LaunchAgents/com.apple.CSConfigDotMacCert-ken.wug\@me.com-SharedServices.Agent.plist (me.com的共享服务,我不用)
/System/Library/LaunchDaemons/org.cups.cupsd.plist (打印机)
/System/Library/LaunchDaemons/org.cups.cups-lpd.plist (打印机)
/System/Library/LaunchDaemons/com.apple.blued.plist (蓝牙)
/System/Library/LaunchAgents/com.apple.AirPortBaseStationAgent.plist (apple无线基站,我没有这个设备)

顺便给大家介绍一些常见进程:
UserEventAgent 提供用户区程序的事件通知。
TISwitcher 输入法切换。
SystemUIServer 顶部菜单栏。
Dock 底部菜单栏。。
loginwindow window登陆进程,注销什么的。
launchd 不用说了,系统主进程。
fontd 字体进程。
bash shell环境主进程,终端。
Airport基站代理 顾名思义。
pboard 剪贴板,就是复制黏贴。
CCacheServer Kerberos tickets 安全模块,缓存了一些票据,类似密钥。
cvmsComp 跟opengl相关的进程。
kextd 内核扩展服务。
notifyd 系统内消息服务。
diskarbitrationd 磁盘监控服务,响应usb移动硬盘插入,移除等事件。
configd 系统配置,状态监控服务。
syslogd 系统日志。
DirectoryService 文件系统权限验证。
distnoted 外部消息服务,比如iphone, ipad与mac的连接。
ntpd 时间服务。
usbmuxd USB支持。
securityd 安全钥匙。
mDNSResponder DNS支持。
KernelEventAgent 内核事件响应。
hidd 人体工程学设置支持。
fseventsd FSEvent文件系统事件支持。
dynamic_pager 虚拟内存。swap。
dpd display port支持。
autofsd 自动mount网络文件系统。
coreservicesd 核心服务进程。
coreaudiod 音频服务进程。
WindowServer UI界面。
ocspd 对OCRs的安全协议支持。
autofsd 自动mount文件系统,配置在 /etc/auto_master

如何在Mac OS X上创建一个Service服务进程

在Mac上,共有4钟后台进程类型,可以参考Designing Daemons and Services。要实现启动服务,又不依赖于用户,可以使用Launch Daemon。

创建Launch Daemon

  • 运行Xcode,创建一个简单的命令行应用WebTwainService

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    #import <Foundation/Foundation.h>
      
    int main(int argc, const char * argv[])
    {
      
        @autoreleasepool {
      
            // insert code here...
            NSLog(@"Hello, World!");
      
        }
      
        while (1)
        {
            sleep(100);
        }
        return 0;
    }
  • 编译工程,把WebTwainService放到/Applications/Dynamsoft/WebTwainService.

  • 参考 Create Launch Daemons and Agents,创建配置文件com.dynamsoft.WebTwainService.plist.

    • StandardErrorPath & StandardOutPath: service日志文件路径

    • KeepAlive. 设置成true. 一旦WebTwainService异常崩溃, 系统会自动重启服务。

    • Label: 一个唯一值

    • ProgramArguments: 可执行文件路径

  • 这个plist配置文件可放置的地方包括:

    • ~/Library/LaunchAgents

    • /Library/LaunchAgents

    • /Library/LaunchDaemons

    • /System/Library/LaunchAgents

    • /System/Library/LaunchDaemons

  • com.dynamsoft.WebTwainService.plist放到/Library/LaunchDaemons下

  • 要成功注册服务,还必须修改目录权限:sudo chown root  /Library/LaunchDaemons/com.dynamsoft.WebTwainService.plist.

  • 命令行中输入sudo launchctl运行launchd

  • 注册服务load -D system /Library/LaunchDaemons/com.dynamsoft.WebTwainService.plist。然后我们可以看到服务被加载了:

  • 输入list可以查看运行的进程

  • 现在重启系统,然后打开日志/var/log/webtwain.log,查看服务是否在运行了:

Mac OS启动服务优化高级篇(launchd tuning)的更多相关文章

  1. Mac OS启动服务优化高级篇(launchd tuning)禁用某些服务

    http://kenwublog.com/mac-os-launchd-tuning Mac下的启动服务主要有三个地方可配置:1,系统偏好设置->帐户->登陆项2,/System/Libr ...

  2. Mac OS启动服务优化高级篇

    一.Mac下的启动服务主要三个可配置的地方 1.系统偏好设置->帐户->登陆项 2./System/Library/StartupItems 和 /Library/StartupItems ...

  3. mac os 启动服务命令 launchctl

    参考苹果开发者网址 https://developer.apple.com/library/mac/documentation/MacOSX/Conceptual/BPSystemStartup/Ch ...

  4. Mac OS X 快捷键(完整篇) 转载

    转载自:http://www.nooidea.com/2011/01/mac-os-x-keyboard-shortcuts.html 快捷键是通过按下键盘上的组合键来调用 Mac OS X 功能的一 ...

  5. 【转】Mac OS X 快捷键(完整篇)

    原文网址:http://www.nooidea.com/2011/01/mac-os-x-keyboard-shortcuts.html 没有写到基本的一些组合,只是一些可能大家不太常用到但及其提高机 ...

  6. Mac OS X 快捷键(完整篇)

    不少朋友提出要求,希望有个「高质量」的列表.其实这样的资源真是太多,平果官网就有 快捷键文档(多国语言版本).于是花了20分钟,浏览了一些网站,整理了点资源放过来供大家参考. 快捷键是通过按下键盘上的 ...

  7. cocos2d-x mac os启动 android helloworld

    工具环境: mac os, jdk, Android Studio, cocos2d-x-3.13.1, ant, android-ndk. 解压coco2d-x后,根目录下有 setup.py, 命 ...

  8. mac下的改装人生——制作mac os 启动盘

    我即将开始对我的mac进行彻底的改造,现在还需要的是一个mac的启动盘或者启动光盘.由于没钱买mac的安装光盘或者安装盘,只能网上下了一个镜像自己做启动盘~ 需要:装有Mac Os的电脑,至少8g的u ...

  9. Mac OS X 下优化 Terminal,一篇就够了!

    先上最终效果图: 目录 目录 1. 相关工具介绍 2. 配置总览 3. 安装步骤 3.1. 安装 iTerm2 3.2. 安装XCode's Command line tools 3.3. 检查 zs ...

随机推荐

  1. AspNet MVC3中过滤器 + 实例

    AspNet MVC3中过滤器 + 实例 过滤器在请求管线注入额外的逻辑,提供简单优雅的方法实现横切点关注(AOP),例如日志,授权,缓存等应用.通过AOP可以减少在实际的业务逻辑中参杂过多非直接业务 ...

  2. 安装xdebug后var_dump输出没有格式化的问题

    在ubuntu10.04下面配置Apache2.2 + PHP5.3的开发环境,顺便装了一个xdebug扩展方便调试代码. 但是环境配置好了之后却发现xdebug加载成功了但是var_dump输出的内 ...

  3. 在windows上编译MatConvNet

    有个BT的要求,在windows上使用MatConvNet,并且需要支持GPU. 费了些力气,记录一下过程(暂不支持vl_imreadjpeg函数) 在这里下载MatConvNet,机器配置vs201 ...

  4. win7 安装 sql2000

    win7 安装:http://wenku.baidu.com/link?url=xNcfrMaMzX0KgBcjpMaySRaKITM2Op73ZI8sOX49zgl-GWPGB3vqye9gZA_c ...

  5. KL25的AD采集操作

    飞思卡尔的KL25单片机AD做的是很不错的,SAR型能做到16位.不过数据手册就写得不怎么样了,简直可以说是坑爹,很难看懂.有的描述让人难以理解,你指望在别的地方对不理解的地方会有其他角度的描述,结果 ...

  6. poj 1088 滑雪(贪心算法)

    思想: (贪心算法 ,看到题目是中文才做的) 先对数组中的数据进行排序,从最小的数据计算 当前的顶点的可以滑行的最大值=max(周围可达的顶点的可以滑行的最大值)+1 这样计算最后产生的路径肯定是最大 ...

  7. jquery uploadifive使用

    应为考虑到flash将逐渐被淘汰,所以选择了uploadfive完成上传 js文件和css文件自行下载,我上传了免费版(啃爹的官网竟然收费) 文件引入之后: <input type=" ...

  8. ASP.NET MVC with Entity Framework and CSS一书翻译系列文章之第五章:排序、分页和路由

    本章的重点是对产品信息增加排序和分页的功能,以及使用ASP.NET Routing特性添加更加友好的URL支持. 注意:如果你想按照本章的代码编写示例,你必须完成第四章或者直接从www.apress. ...

  9. 利刃 MVVMLight 2:Model、View、ViewModel结构以及全局视图模型注入器的说明

         上一篇我们已经介绍了如何使用NuGet把MVVMLight应用到我们的WPF项目中.这篇我们来了解下一个基本的MVVMLight框架所必须的结构和运行模式. MVVMLight安装之后,我们 ...

  10. 用PopWindow做下拉框

    最近在做下拉框,本来想用spinner,可是spinner达不到项目要求,跟同学同事问了一圈,都在用popwindow, 网上看了一下,popwindow挺简单的,可定制性挺强的,符合我的要求,所以, ...