OS X background process
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的更多相关文章
- 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 ...
- ORA-00444: background process DBRM failed while starting
SQL> startup 报错:ORA-00444: background process DBRM failed while startingORA-00020:maximum number ...
- 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 ...
- OS X获取process.env.NODE_ENV出错
原来项目是其它小组在维护,现在我们需要维护部分功能,把项目带到OS X上运行发现 webpack.config.js获取process.env.NODE_ENV变量出错 解决: 根据电脑操作系统平台类 ...
- 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 ...
- Oracle ABP(Autotask Background Process)
ABP相当于自动任务与调度程序之间的中介,其主要作用是将自动任务转换成Autotask作业,供调度程序执行.同样重要的是,ABP还维护所有任务执行的历史记录.ABP将其专用资料档案库存储在sysaux ...
- ksvcreate: Process(m000) creation failed
一测试服务器数据库(Oracle Database 10g Release 10.2.0.5.0 - 64bit Production)突然访问不了,检查发现数据库处于挂起模式(hang mode), ...
- 【OS】NMON的简介和使用
[OS]NMON的简介和使用 目前NMON已开源,以sourceforge为根据地,网址是http://nmon.sourceforge.net. 1. 目的 本文介绍操作系统监控工具Nmon的概念. ...
- Linux 进程与信号的概念和操作 linux process and signals
进程 主要参考: http://www.bogotobogo.com/Linux/linux_process_and_signals.php 译者:李秋豪 信号与进程几乎控制了操作系统的每个任务. 在 ...
随机推荐
- 从源码看HashMap键值对集合
之前我们看过了两种类型的集合,ArrayList集合和LinkedList集合,两种集合各有优势,我们不具体说了,但是本篇要看的集合可以完成它们完成不了的任务.比如:现有一篇文章,要你统计其中出现了哪 ...
- 计算机存储负数以及int转byte时-128的出现
我们看下面这段代码 输出的结果的是128,这个没什么疑问 但是当我们不改变数值仅仅加了一个强制转换后 这时我们会发现结果会变成负的128.这时候我们就要怀疑了,为什么会出现这样的结果呢? 对于这个问题 ...
- C/C++ char数组存储字符串内存地址
问题描述: #include <stdio.h> int main(void) { //program 6.3 Arrays of strings ][]; ;i<;++i){ ;j ...
- .NET中的repeater简介及分页效果
Repeater控件是一个数据绑定容器控件,它能够生成各个项的列表,并可以使用模板定义网页上各个项的布局.当该页运行时,该控件为数据源中的每个项重复此布局. 配合模板使用repeater控件 若要使 ...
- bat文件的一些小技巧
bat文件的简介: bat文件是dos下的批处理文件.批处理文件是无格式的文本文件,它包含一条或多条命令.它的文件扩展名为 .bat 或 .cmd.在命令提示下键入批处理文件的名称,或者双击该批处理文 ...
- 强大的健身软件——Keep
Keep是一款具有社交属性的健身工具类产品.用户可利用碎片化的时间,随时随地选择适合自己的视频健身课程,进行真人同步训练.完成后还可以"打卡"晒成就. 你可根据器械.部位.难度 ...
- 腾讯云数据库团队:浅谈如何对MySQL内核进行深度优化
作者介绍:简怀兵,腾讯云数据库团队高级工程师,负责腾讯云CDB内核及基础设施建设:先后供职于Thomson Reuters和YY等公司,PTimeDB作者,曾获一项发明专利:从事MySQL内核开发工作 ...
- Java对象序列化
Java 1.1增添了一种有趣的特性,名为“对象序列化”(Object Serialization).它面向那些实现了Serializable接口的对象,可将它们转换成一系列字节,并可在以后完全恢复回 ...
- RabbitMQ-从基础到实战(4)— 消息的交换(下)
0.目录 RabbitMQ-从基础到实战(1)- Hello RabbitMQ RabbitMQ-从基础到实战(2)- 防止消息丢失 RabbitMQ-从基础到实战(3)- 消息的交换(上) 1.简介 ...
- Codeforces Gym 100269E Energy Tycoon 贪心
题目链接:http://codeforces.com/gym/100269/attachments 题意: 有长度为n个格子,你有两种操作,1是放一个长度为1的东西上去,2是放一个长度为2的东西上去 ...