如何获取用于LLDB调试的dext扩展进程ID
解决DriverKit扩展(dext)无法通过ps获取进程ID的问题
DriverKit扩展(dext)并非普通用户态进程,它运行在专用的系统进程上下文或内核相关环境中,因此无法通过ps命令直接通过bundle ID定位进程ID。可以通过以下几种方法获取:
使用
ioreg命令从I/O注册表查询
DriverKit驱动加载后会在系统的I/O注册表中注册信息,执行以下命令可直接过滤出目标驱动的进程ID:sudo ioreg -n com.accusys.scsidriver -r -c IOUserDriver输出内容中
IOUserClientCreatorPID对应的数值就是该驱动关联的进程ID。通过系统日志定位进程ID
利用系统日志查找驱动加载时的关联信息,执行命令:sudo log show --predicate 'subsystem == "com.apple.driverkit"' --info --last 10m | grep com.accusys.scsidriver日志条目里会包含驱动加载过程中关联的进程ID。
直接用lldb附加(无需手动找PID)
无需手动查找PID,可直接通过bundle ID让lldb附加到目标驱动,执行:sudo lldb -n com.accusys.scsidriver如果上述命令无法直接匹配,也可以结合
ioreg的结果指定进程:sudo lldb -p $(sudo ioreg -n com.accusys.scsidriver -r -c IOUserDriver | awk '/IOUserClientCreatorPID/ {print $4}')
注意事项
- 所有操作需要使用
sudo获取管理员权限,因为DriverKit扩展属于系统级组件。 - 若驱动刚完成激活,建议等待10-20秒再执行查询命令,确保系统完成驱动的注册流程。
内容的提问来源于stack exchange,提问作者charles.cc.hsu
相关产品推荐
相关产品推荐

