OSX系统启动与后台服务

  1. OSX启动过程
    1. mac固件激活,初始化硬件,加载BootX引导器。
    2. BootX加载内核与内核扩展(kext)。
    3. 内核启动launchd(init)进程。
  2. launchd进程
    1. 开机后先加载system wide daemon;加载完成后显示登录窗口;
    2. 登录后加载per user agents;
    3. 用户启动的所有的进程实际也是有launchd加载的!!!
  3. Launch Daemon与Launch Agent
    1. 两者都是后台服务,前者是系统级的;后者是用户级的;
    2. 前者在开机时会启动,类似windows的service;而后者必须要用户登录后才会启动;
    3. Launch Daemon/Agent都是有plist文件定义的,文件是xml格式;
    4. Daemon目录:
      1. /System/Library/LaunchDaemons
      2. /Library/LaunchDaemons
    5. OSX在开机时的操作:
      1. 注册在上述目录中的plist内的port和file descriptor
      2. 执行keepAlive=true以及RunAtLoad=true的Deamon
    6. 执行完deeon之后才会显示登录对话框
    7. 登录之后执行Launch Agents
    8. Agents目录:
      1. /System/Library/LaunchAgents
      2. /Library/LaunchAgents
      3. ~/Library/LaunchAgents
    9. 其它同Deamon
    10. 附图一张,测试一下修复之后的上传功能是否正常。 
    11. 2015122210312780909335
  4. Daemon的其它知识
    1. on-daemon:
      1. 相对于keepAlive而言,它允许被杀掉;而keepalive的daemon一旦被杀,launchd又会启动;
      2. on-daemon可以绑定端口,一旦收到发送到某个端口的包,自动启动某个进程;或其它依赖的情形也有可能导致daemon被启动;
    2. 允许定时daemon
    3. 允许监视某个文件或目录
  5. LoginItem
    1. 这个相当于Windows的“启动”开始菜单;
    2. 对于使用沙盒方式运行的程序,应当使用Service Management Framework方式加载。
      1. 要求必须有两个应用,一个是主应用一个是Helper;其中Helper不是沙盒应用;
      2. helper程序存放在主程序的Contents/Library/LoginItems目录下
      3. 主程序在运行时调用SMLoginItemSetEnabled()函数来设置helper程序为自启动程序。
    3. 主程序必须在Application的目录下,开机启动的设置才会生效,否则会失败
  6. StartupItem
    1. 此方法已不推荐
    2. 它从性质上像LoginItem,但不要求必须登录,又类似于Deamon。
  7. 优秀文章:
    1. MAC服务管理(launchd)
    2. OS X那些事—恶意软件是如何启动的

You may also like

Leave a Reply

Your email address will not be published. Required fields are marked *