【on property:init.svc.xxx=xxx】Android监测进程的运行状态

最近在Android 9.0平台上遇到锁屏界面解不了锁,抓logcat发现keymaster有发生过crash而重启过。问题在于不是keymaster现在不能用而是keystore不能用。为了测试,进入adb mode,主动kill keymaster进程,发现此时keystore再也不能用了。对比Android 8.0发现,不管我怎么把keymaster kill,keystore仍然可用。这样一来,在Android 9.0上keystore服务进程必须在keymaster服务进程后面进行初始化,即当keymaster服务进程重启了,keystore服务进程也需要重启。

device/qcom/{$PLATFORM}/init.target.rc添加如下代码(此方法可以防止偶现keymaster发生重启导致keystore不能用的问题,但不能解决keymaster总发现异常的问题,且暂不知道会不会有其他影响,记录的目的是在某种情况下可以通过此方式来监测服务进程的运行状态):

#keystore和vendor.keymaster分别是对应服务的名字
#keystore服务定义来自system/security/keystor.rc文件
service keystore /system/bin/keystore /data/misc/keystore
    class main
    user keystore
    group keystore drmrpc readproc log
    writepid /dev/cpuset/foreground/tasks

on property:init.svc.vendor.keymaster-3-0=running
   stop keystore
   start keystore

<think>好的,用户现在问的是“on property:sys.boot_completed=1 是什么阶段”。这个问题看起来是关于Android系统的init进程配置的,具体是在init.rc文件中的触发器。我需要先回忆一下Android启动流程的相关知识。 首先,用户之前的问题是关于Linux内核块设备轮询间隔的命令,现在转向了Android的启动阶段,可能用户是在学习系统配置或者开发相关的知识,可能是一位开发者或者系统管理员。 接下来,我需要确定“on property:sys.boot_completed=1”的具体含义。在Androidinit.rc文件中,触发器用来定义在什么条件下执行某些动作。这里的property:sys.boot_completed=1应该是指当系统属性sys.boot_completed的值变为1时触发。 sys.boot_completed是Android系统中的一个属性,当系统完成启动后会被设置为1。所以这个触发器是在系统启动完成后执行的阶段。用户可能想知道这个阶段具体是在启动流程的哪个步骤,或者他们正在编写或调试init脚本,需要了解触发时机。 然后,我需要详细解释这个阶段的上下文,包括Android启动流程的几个阶段:内核启动、init进程解析rc文件、触发early-initinit、late-init,然后启动Zygote和系统服务。当所有服务启动完成后,系统会设置sys.boot_completed为1,这时候进入post-boot阶段,执行用户态的服务和应用程序。 可能用户遇到的场景是,他们需要在系统完全启动后执行某个脚本或服务,所以需要正确放置触发器。或者他们遇到了启动顺序的问题,需要确认某个动作是否在正确的时间执行。此外,用户可能对init.rc的语法不太熟悉,需要了解如何正确使用属性触发器。 还要考虑用户可能的深层需求,比如如何调试启动问题,或者如何确保他们的服务在正确的时间启动。可能需要提醒他们在修改init脚本时的注意事项,比如不同Android版本的差异,或者如何通过日志验证属性值的变化。 需要确保回答结构清晰,分层次解释,帮助用户逐步理解。同时,使用中文,避免技术术语过于晦涩,但也要保持准确性。确认是否需要补充实际应用中的例子,或者常见错误,但根据用户的问题,可能只需要解释阶段本身。</think>这是Android系统启动过程中**核心服务启动完成后阶段**的触发器条件,主要用在init.rc配置文件中。我们从三个层次解析其作用: 一、**语法结构解析** ```bash on property:sys.boot_completed=1 # 属性条件触发器 command1 # 触发后执行的命令 command2 # 通常用于启动用户级服务 ``` - `property:`前缀表示系统属性监控 - `sys.boot_completed`是Android系统关键状态属性 - `=1`表示属性值变为1时触发 二、**启动阶段定位** 1. **完整启动流程**: ① 内核启动 → ② init进程 → ③ 挂载文件系统 → ④ 启动核心服务 → ⑤ 设置`sys.boot_completed=1` → ⑥ 启动用户应用 2. **触发时机特点**: - 发生在所有系统服务(ServiceManager、Zygote等)启动完成后 - 在`late-init`阶段之后 - 标志着系统进入"ready"状态 三、**实际应用场景** ✅ 典型应用 ```rc # 启动需要依赖系统就绪的服务 on property:sys.boot_completed=1 start my_custom_service exec_background /system/bin/logcat_cleaner ``` ⚠️ 注意要点 - 系统首次启动时才会触发(属性从0→1变化) - 通过`getprop sys.boot_completed`可验证当前状态 - 部分厂商ROM会修改该属性的设置时机 **扩展知识**:在AOSP源码中,该属性的设置位于`system/core/init/builtins.cpp`的`do_boot_complete()`函数内,与`ActivityManagerService`的启动完成事件相关联。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值