Types of Background Process

  1. login item

  2. xpc service

  3. daemon/agent (也可以叫 mach service)

  4. startup item

login item

login items 是 OS X 对需要开机运行的APP推荐的启动方式,当用户登录之后自动调起程序,配置 login item 有两种方式:

  1) LSSharedFileListInsertItemURL() 或者 系统偏好设置->用户和群组>登录项

    通过这种方式,login item 会被保存在路径: ~/Library/Preferences/com.apple.loginitems.plist

  2) Service Management Framework

    方式1不可以在 sand box 中使用,Service Management Framework 可以,但是他要求 app 有一个 helper 程序。

    helper 程序存放在 app 的 Contents/Library/LoginItems 目录下,app 的主程序通过在运行时调用 SMLoginItemSetEnabled() 函数来设置 helper 程序为自启动程序,helper 程序在自启动后则可以调起其他程序。

    另外,方式2只适用于 app 被保存在 /Applications/ 路径下的情形。

    

xpc service

XPC 是 OS X 下的一种 IPC (进程间通信) 技术, 它实现了权限隔离, 使得 App Sandbox 更加完备。

使用 XPC,可以将 app 拆分为『主进程+XPC服务』的模式,这哥模式的好处是可以实现错误隔离和权限隔离。

xpc service 通过 NSXPCListener 对象来监听从主进程传入的请求,与主进程之间的通信通常是异步的。

xpc service 的生命周期都由 XPC 来进行控制,当 xpc service 在接收消息时 crash 了,其对应的 connection 依然直有效,但是这个未被处理的消息需要主进程重新发送请求。

daemon/agent

daemon 和 agent 都是由 launchd 进程负责启动的后台作业,launchd 是 OS X 系统用户态的第一个进程。

根据安装路径,可以细分为:

  1. ~/Library/LaunchAgents: 每个用户私有的agent

  2. /Library/LaunchAgents: 所有用户共有的agent

  3. /Library/LaunchDaemons: 所有用户共有的 daemon,具有root权限

  4. /System/Library/LaunchAgents: 系统配置的 agent

  5. /System/Library/LaunchDaemons: 系统配置的 daemon

daemon/agent 通过 plist 文件(property list)进行编程并存入上文所描述的路径中。

如何编写和配置 plist,可以参考:

  http://www.launchd.info/

  https://developer.apple.com/legacy/library/documentation/Darwin/Reference/ManPages/man5/launchd.plist.5.html

注:通过下图可知,当 daemon 调起有 UI 程序时,会以 agent 的权限调起 UI 程序。

startup item

根据官方文档,这个方式将在以后被废弃,有兴趣可以去看官方文档。另外,想找这方面的实例可以去参考 cisco 的 anyconnect,它使用的就是 startup item 来配置程序的自启动。

https://developer.apple.com/library/content/documentation/MacOSX/Conceptual/BPSystemStartup/Chapters/StartupItems.html

其他参考:

http://www.codesec.net/view/219693.html

https://developer.apple.com/library/content/documentation/MacOSX/Conceptual/BPSystemStartup/Chapters/Introduction.html

https://developer.apple.com/library/content/technotes/tn2083/_index.html

https://objccn.io/issue-14-4/

OS X background process的更多相关文章

  1. PPID=1 runs as a background process, rather than being under the direct control of an interactive user

    https://en.wikipedia.org/wiki/Daemon_(computing) [后台进程,非互动] d 结尾 syslogd 系统日志记录 sshd 响应ssh连接请求 In mu ...

  2. ORA-00444: background process DBRM failed while starting

    SQL> startup 报错:ORA-00444: background process DBRM failed while startingORA-00020:maximum number ...

  3. How to change current process to background process

    Situation: there is a script or command is running, but we need to close current box/windows to do o ...

  4. OS X获取process.env.NODE_ENV出错

    原来项目是其它小组在维护,现在我们需要维护部分功能,把项目带到OS X上运行发现 webpack.config.js获取process.env.NODE_ENV变量出错 解决: 根据电脑操作系统平台类 ...

  5. ORA-00445: Background Process "xxxx" Did Not Start After 120 Seconds

    Recent linux kernels have a feature called Address Space Layout Randomization (ASLR).ASLR  is a feat ...

  6. Oracle ABP(Autotask Background Process)

    ABP相当于自动任务与调度程序之间的中介,其主要作用是将自动任务转换成Autotask作业,供调度程序执行.同样重要的是,ABP还维护所有任务执行的历史记录.ABP将其专用资料档案库存储在sysaux ...

  7. ksvcreate: Process(m000) creation failed

    一测试服务器数据库(Oracle Database 10g Release 10.2.0.5.0 - 64bit Production)突然访问不了,检查发现数据库处于挂起模式(hang mode), ...

  8. 【OS】NMON的简介和使用

    [OS]NMON的简介和使用 目前NMON已开源,以sourceforge为根据地,网址是http://nmon.sourceforge.net. 1. 目的 本文介绍操作系统监控工具Nmon的概念. ...

  9. Linux 进程与信号的概念和操作 linux process and signals

    进程 主要参考: http://www.bogotobogo.com/Linux/linux_process_and_signals.php 译者:李秋豪 信号与进程几乎控制了操作系统的每个任务. 在 ...

随机推荐

  1. php表单修改数据

    (接前面写的) 第一个页面xiugai.php <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" ...

  2. QTP11完美破解小笔记

    相比Loadrunner的破解,QTP的应该会更简单,但是效果并没有Loadrunner的长久.QTP的破解只能维持30天,每30天需要再进行如下操作: 1.到C:\ProgramData目录下面去删 ...

  3. flex布局应用于踩坑

    一.预告 本文不是一篇入门的文章所有请符合以下条件的战斗人员绕道: 1.初学前端,对前端的传统布局还不是很熟悉的人 2.后端人员对前端不打算深入学习的同学 二.开篇 flex布局原本是好几个月前就一直 ...

  4. VS2008与opencv结合使用的方法

    使用平台:win7(32位)系统,opencv 2.3.1,vs 2008. 目前在需要在vs上运行KCF视觉跟踪算法,其中有用到opencv的库,刚刚开始遇到的如下问题: 1. 计算机无法找到ope ...

  5. 手把手教你用Mysql-Cluster-7.5搭建数据库集群

    前言 当你的业务到达一定的当量,肯定需要一定数量的数据库来负载均衡你的数据库请求,我在之前的博客中已经说明了,如何实现负载均衡,但是还有一个问题就是数据同步,因为负载均衡的前提就是,各个服务器的数据库 ...

  6. 详解Swing中JTree组件的功能

    JTree组件是另外一个复杂组件,它不像 JTable 那样难用,但是也不像 JList 那么容易.使用 JTree 时麻烦的部分是它要求的数据模型. JTree组件的功能来自树的概念,树有分支和叶子 ...

  7. 摆脱printf的噩梦

    众所周知,printf是一个方便.直观.易写.变长参数的打印函数,但它有一个致命的缺陷,如下的语句将导致程序出现严重的运行时错误: printf("%s", 1); 然后程序中断, ...

  8. XML(20161113)

    XML: 可扩展标记语言 在页面之间传递数据使用的,专门为了数据传输而存在 载体 HTML:超文本标记语言 显示 XML写法: 标签:<标签名></标签名> 特点:1.必须要有 ...

  9. C++ Primer 5 CH1 开始

    1.1 编写一个简单的C++程序 在大多数系统中,main 的返回值被用来指示状态.返回值 0 表示成功,非 0 的返回值的含义由系统定义,通常用来指出错误类型. 访问 main 的返回值的方法依赖于 ...

  10. mac 下安装securecrt

    下载文件链接中附带的文件. 1.先找到secureCRT的包内容,进入MACOS文件夹.替换crack中的secureCRT文件. 2.断网.进入软件,显示你的验证码过期.点continue.选择手动 ...