service
service lmkd /system/bin/lmkd
class core
user lmkd
group lmkd system readproc
capabilities DAC_OVERRIDE KILL IPC_LOCK SYS_NICE SYS_RESOURCE
critical
socket lmkd seqpacket+passcred 0660 system system
task_profiles ServiceCapacityLow
- 属于核心服务组,系统启动早期优先启动
- 用户为lmkd
- 组有lmkd system readproc
- 关键权限:
4.1 KILL: 允许终止其他进程(核心功能)
4.2 IPC_LOCK: 锁定内存页,防止被交换到磁盘
4.3 SYS_NICE SYS_RESOURCE: 调整进程优先级和资源限制
4.4 DAC_OVERRIDE:绕过文件的自主访问控制(DAC)规则(包括读写和执行) - critical: 标记为关键服务,若崩溃会触发系统重启
- 创建 /dev/socket/lmkd 用于接收内核或用户空间的内存压力事件(如 PSI 指标)
- task_profiles定义进程的资源管理策略,通过 cgroups(控制组) 机制限制进程的 CPU、内存等资源使用,确保关键服务在系统资源紧张时优先运行
- ServiceCapacityLow:
8.1 CPU 限制:可能降低非关键进程的 CPU 配额,优先保障 lmkd 的调度响应
8.2 内存优先级:防止 lmkd 自身因内存不足被终止,确保其能持续监控和终止低优先级进程
property
on property:sys.boot_completed=1
exec_background /system/bin/lmkd --boot_completed
on property:sys.boot_completed=1 && property:lmkd.reinit=0
setprop lmkd.reinit 1
- 系统启动完成(sys.boot_completed=1)后,执行 --boot_completed 初始化参数
- 若未在启动时初始化(lmkd.reinit=0),设置标志触发后续重载。
on property:lmkd.reinit=1
exec_background /system/bin/lmkd --reinit
通过 --reinit 重新加载配置,例如调整内存阈值或调试参数
setprop lmkd.reinit ${ sys.boot_completed :-0}
修改这些属性后,根据系统是否完成启动(sys.boot_completed)决定立即重载或延迟到启动完成。
每个属性详细的说明,后续会补充在这里。
exec_background
exec_background 是 Android init 脚本语言中的一条指令