Mac OS启动服务优化高级篇(launchd tuning)

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

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,查看服务是否在运行了:

 

技术改变世界! --狂诗绝剑
目录
相关文章
|
2月前
|
安全 算法 搜索推荐
现代操作系统的设计与优化策略
本文深入探讨了现代操作系统在设计与优化方面的多种策略。通过分析系统架构、内核优化、用户界面设计以及安全性增强等关键方面,揭示了如何构建一个高效、稳定且安全的操作系统。同时,结合具体案例和实际应用场景,展示了这些策略在实践中的应用与成效。
57 1
|
6天前
|
缓存 资源调度 安全
深入探索Linux操作系统的心脏——内核配置与优化####
本文作为一篇技术性深度解析文章,旨在引领读者踏上一场揭秘Linux内核配置与优化的奇妙之旅。不同于传统的摘要概述,本文将以实战为导向,直接跳入核心内容,探讨如何通过精细调整内核参数来提升系统性能、增强安全性及实现资源高效利用。从基础概念到高级技巧,逐步揭示那些隐藏在命令行背后的强大功能,为系统管理员和高级用户打开一扇通往极致性能与定制化体验的大门。 --- ###
27 9
|
9天前
|
安全 网络协议 Linux
Linux操作系统的内核升级与优化策略####
【10月更文挑战第29天】 本文深入探讨了Linux操作系统内核升级的重要性,并详细阐述了一系列优化策略,旨在帮助系统管理员和高级用户提升系统的稳定性、安全性和性能。通过实际案例分析,我们展示了如何安全有效地进行内核升级,以及如何利用调优技术充分发挥Linux系统的潜力。 ####
28 1
|
27天前
|
监控 Linux 云计算
Linux操作系统在云计算环境中的实践与优化###
【10月更文挑战第16天】 本文探讨了Linux操作系统在云计算环境中的应用实践,重点分析了其在稳定性、安全性和高效性方面的优势。通过具体案例,阐述了Linux如何支持虚拟化技术、实现资源高效分配以及与其他开源技术的无缝集成。文章还提供了针对Linux系统在云计算中的优化建议,包括内核参数调整、文件系统选择和性能监控工具的应用,旨在帮助读者更好地理解和应用Linux于云计算场景。 ###
34 3
|
1月前
|
安全 调度 虚拟化
探索现代操作系统的架构与优化
本文将深入探讨现代操作系统的核心架构和优化技术。从操作系统的基本定义入手,逐步解析其内核结构、进程管理、内存管理和I/O系统。同时,还将讨论现代操作系统在多核处理器支持、虚拟化技术和安全性方面的创新与优化措施。通过这些内容,读者可以全面了解操作系统的工作原理及其在实际应用中的表现与改进。
|
1月前
|
存储 算法 Linux
探索现代操作系统的架构与优化
本文深入探讨了现代操作系统的核心架构及其性能优化策略。通过对主流操作系统架构的分析,揭示其在多任务处理、内存管理和文件系统等方面的特点。同时,针对当前技术趋势,提出一系列优化措施,旨在提升系统的运行效率和用户体验。通过实例分析,展示如何在实际场景中应用这些优化技术,确保系统在高负载下的稳定运行。
|
1月前
|
存储 安全 数据安全/隐私保护
探究现代操作系统的架构与优化策略
本文旨在深入探讨现代操作系统的核心架构及其性能优化方法。通过分析操作系统的基本组成、关键技术和面临的挑战,揭示如何通过技术手段提升系统效率和用户体验。不同于传统的技术文章摘要,这里不罗列具体研究方法和结果,而是以简明扼要的语言概述文章的核心内容和思考方向,为读者提供宏观视角和技术深度。 生成
28 3
|
2月前
|
缓存 算法 安全
探索现代操作系统的架构与优化
本文旨在深入探讨现代操作系统的核心架构,并详细分析其性能优化策略。通过对操作系统的基本功能、主要组件以及它们之间的交互进行剖析,帮助读者理解操作系统在提高硬件资源利用率和用户体验方面所发挥的关键作用。此外,文章还将介绍几种常见的性能优化方法,包括进程调度算法、内存管理技术和I/O系统优化等,并通过实际案例展示这些优化技术的应用效果。
|
2月前
|
人工智能 算法 安全
探索现代操作系统的架构与优化
本文深入探讨现代操作系统的核心架构及其性能优化技术。通过分析操作系统的基本功能和设计原则,阐述其在资源管理、内存分配及多任务处理方面的创新方法。进一步,文章将聚焦于如何通过内核调优、算法改进等手段提升系统效率,确保在高负载环境下的稳定性和响应速度。最后,讨论未来操作系统可能面临的挑战与发展趋势,为相关领域的研究和实践提供参考。
|
2月前
|
机器学习/深度学习 算法 物联网
探究操作系统的心脏:调度算法的演变与优化
本文旨在深入探讨操作系统中核心组件——调度算法的发展脉络与优化策略。通过分析从单任务到多任务、实时系统的演进过程,揭示调度算法如何作为系统性能瓶颈的解决关键,以及在云计算和物联网新兴领域中的应用前景。不同于传统摘要,本文将注重于概念阐释与实例分析相结合,为读者提供直观且全面的理解视角。