• 忘掉天地
  • 仿佛也想不起自己
bingliaolongBingliaolong  2023-03-27 23:08 Aet 隐藏边栏 |   抢沙发  24 
文章评分 4 次,平均分 5.0

服务类型

Login item

  1. 不由launchd管理,其他3个是
  2. 有UI

XPC service

  1. 无UI,除非是用IOSurface这种方式

Launch Daemon

  1. 运行在系统上下文中,其他三个运行在用户上下文中

Launch Agent

  1. 不推荐使用UI

XPC service

  1. 由单个应用程序管理并为其提供服务
  2. 可以通过将应用程序重组为主进程和服务,使得服务崩溃的影响会大大减少

Launch Daemon

  1. 守护进程严格来说是响应低级请求的后台进程

通信机制

  1. XPC
  2. 传统的CS通信方式,如Apple事件、TCP/IP、UDP、其他套接字和管道机制
  3. 远程过程调用,如Mach RPC、Sun RPC和分布书对象
  4. 内存映射

Launch Agent

  1. 代理可以与登录用户的上下文中的其他进程以及系统上下文中的守护进程通信
  2. 它可以显示一个界面,但是不推荐

launchd

  1. launchd是一套统一的开源服务管理框架,它用于启动、停止以及管理后台程序、应用程序、进程和脚本
  2. launchd是macOS第一个启动的进程,该进程的PID为1,整个系统的其他进程都是它创建的
  3. 当launchd启动后,它会扫描/System/Library/LaunchDaemons/Library/LaunchDaemons中的plist文件并加载他们
  4. 当输入密码登录系统后,launchd会扫描/System/Library/LaunchdAgents/Library/LaunchAgents~/Library/LaunchAgents这三个目录中的plist文件并加载它们
  5. 每个plist文件都是一个任务,加载不代表立即运行,只有设置了RunAtLoadtruekeepAlivetrue时,才会加载并同时启动这些任务

plist

  1. launchd是通过以“.plist”后缀结尾的xml⽂件来定义⼀个程序的开机⾃启动的,我们⼀般称它为plist⽂件

创建服务

  1. 首先编译出一个可执行文件,比如testUecm
  2. 然后编写plist文件,命名为local.launchd_test_uecm.app.plist
    1. 需要把文件创建好后放到对应的目录

  1. 加载plist文件

  1. 启动该服务

  1. 其他命令

调试

  1. 附加到进程调试
    1. 它不显示日志
    2. 可以在一个死循环断下来
    3. 也可以显示出它的UI,想办法让它阻塞住

应用

  1. 一般服务会有保活机制,要调试的话,可能不太方面
  2. 禁用并关闭服务:

  1. 这样服务就被紧掉了,用下面命令重新启动也是起不来的

  1. 要重新启动的话,还是要把禁用的服务打开,就能重新运行了

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

bingliaolong
Bingliaolong 关注:0    粉丝:0 最后编辑于:2023-09-12
Everything will be better.

发表评论

表情 格式 链接 私密 签到
扫一扫二维码分享