为什么launchd每个用户有多个实例(不仅是我和root,还有_spotlight和_windowserver)?


1

我发现launchd进程在进程列表中有多个实例。看起来很有趣的是,有四个用户launchd正在运行这些进程:

  • <current_user [ie me]>
  • _windowserver
  • _聚光灯

如Apple的文档(Creating Launch Daemons and Agents)中所述,launchd将按用户启动。但是为什么用户需要launchd这样的_spotlight_windowserver。我只期待root<current_user[i.e. me]>。为什么两个用户(_spotlight_windowserver)都需要launchd?对于Apple文档或任何其他资源的任何引用,我将不胜感激。

过程父子关系如下:

kernel_task(0,root) -> launchd(1,root) -> launchd(130, _windowserver)
                                       -> launchd(150, <current_user[i.e. me]>)
                                       -> launchd(470, _spotlight)

Answers:


2

明确的答案是,通过将进程分成用户,您可以分离每个进程继承的权限。这是一个长期存在的unix惯用语,通过将用户限制放在诸如打开文件和内存甚至线程/进程之类的内容来确保资源的安全性和控制。

在OS X上 - 聚光灯需要生成进程来索引文件,窗口服务器负责启动锁定屏幕,以及为第一个图形用户登录做准备的事情.Root是具有广泛权限和权限的事实管理员帐户。每个用户进程都会启动一个启动程序以启动所需的程序和事物。

至于官方文档,我将从这篇关于守护进程和服务的文章开始。

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

它显示了第一页中已存在的用户与系统级别分割。如果需要,您可以从该链接搜索其他launchd主题(或使用Xcode离线浏览文档)。


谢谢你的详细解释!还有一个问题:_spotlight并且_windowserver需要launchd从它的帮助开始自己的进程(锁定屏幕和索引[例如mdsd]由聚光灯和窗口服务器调度的那些进程)?
静态
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.