MacOS launchd入门

macOS使用launchd来管理守护进程和代理进程,这些进程在系统启动时自动运行。守护进程以root权限运行,服务于整个系统,而代理进程在用户登录时运行,服务于特定用户。可以通过launchctl命令来加载或卸载这些进程。了解/Library和~/Library下的配置文件夹可以查看和管理相关服务。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

macOS 使用launchd 进程来管理守护进程(Daemons)和代理进程(Agents),所以在使用macOS 的系统时,可以使用它来运行shell脚本。在macOS系统启动期间,launchd是内核运行以设置计算机的第一个进程,其他的守护进程如开机自启动脚本都由launchd来启动。

通过查看以下文件夹中的配置文件,可以了解由launchd管理的各种守护进程和代理进程

  • /System/Library/LaunchDaemons Apple 提供的系统守护进程

  • /System/Library/LaunchAgents Apple 提供的代理进程,适用于所有用户

  • /Library/LaunchDaemons 第三方应用的系统守护进程

  • /Library/LaunchAgents 第三方应用提供的代理进程,适用于所有用户

  • ~/Library/LaunchAgents 第三方应用提供的仅应用于当前登录用户的代理进程

那么守护进程和代理进程有什么异同呢?守护进程和代理进程都是后台服务的别称,它们通常对用户是不可见的。守护进程是一个以root权限运行且不需要用户登录的进程,是在系统级执行任务的;而代理进程在每次用户登录时以用户权限运行,在用户交互会话的上下文中执行任务,所以它也被称为用户代理,代理程序还可以访问图形子程序,因此可以向用户呈现GUI。守护进程和代理进程在何时、如何启动、保持活动状态的时间取决于它们的plist配置, 配置文件就位于上面列的文件夹中。(通过man launchd.plist 可以查看配置的说明)

我们不直接与launchd交互,而是使用launchctl命令加载(load)或卸载(unload)被launchd启动的守护进程和代理(launchtcl也可以管理XPC服务)。下面是常用的launchctl的命令


# 1.显示当前的启动脚本
launchctl list
# 2. 设置开机启动并立即启动改服务
launchctl load -w   **.pist 
# 3. 设置开机启动但不立即启动服务 
launchctl load **.pist 
# 4. 停止正在运行的启动脚本
launchctl unload  **.pist 
# 5. 再加上-w选项即可去除开机启动
launchctl unload -w **.pist 
# 注意这些命令有时可能要加sudo才有权限执行

如果想查看一个进程的守护进程,可以先找到进程对应的进程id,然后用grep 看lauchctl list的结果就可以得到相应的守护进程

# 比如查看一个foo的进程,当然也可用 ps -ef |grep foo来查看
$ pgrep -fl foo
40679 bash /tmp/foo
# 再看进程对应到的守护进程是哪个
$ launchctl list|grep 40679
40679   -   com.example.foo

参考:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值