进程信息查询场景(C/C++)
场景介绍
从6.0.0(20) 开始,新增提供应用进程信息查询接口,可以获取设备上已启动的应用进程信息。进程信息包括进程ID、指令命令行、父进程PID、用户ID、用户组ID、进程启动时间、进程所有者ID类型、进程所有者ID等相关信息。
约束和限制
- 当前能力仅支持2in1设备。
- 支持单次输入要查询的进程数最大限制为16个。
业务流程

流程说明:
- 用户在hap应用上调用查询接口获取应用进程信息。
- Device Security Kit接口同步返回应用进程信息给hap应用,hap应用根据返回的应用进程信息进行业务处理。
接口说明
接口如下表,更多接口及使用方法请参见API参考。
| 接口名 | 描述 |
|---|---|
| int32_t HMS_SecurityAudit_QueryAllProcesses(char** result) | 获取所有的应用进程信息。 |
| int32_t HMS_SecurityAudit_QueryProcesses(uint64_t* pids, uint64_t count, char** result) | 获取输入的pid的应用进程信息。 |
开发步骤
- 在开发准备过程中,需要申请权限:ohos.permission.QUERY_AUDIT_EVENT。
- 只允许清单内的企业类应用申请该权限,申请方式请参考:申请使用企业类应用可用权限。
-
在CMakeLists.txt中导入安全审计共享库,并链接该库。
find_library(dsm-lib libsecurityaudit_ndk.z.so)target_link_libraries(entry PUBLIC libace_napi.z.so ${dsm-lib}) -
导入安全审计的头文件。
#include <DeviceSecurityKit/security_audit.h>#include <cstdio> -
开发者根据实际场景,获取单个或所有应用进程信息。
应用在根据应用进程信息进行业务处理后,需要释放查询接口出入参的内存。
-
调用HMS_SecurityAudit_QueryProcesses接口,获取单个应用进程信息。
char *result = nullptr;uint64_t pids[] = {3266};int32_t ret = HMS_SecurityAudit_QueryProcesses(pids, sizeof(pids)/sizeof(pids[0]), &result);if (ret == 0 && result != nullptr) {printf("HMS_SecurityAudit_QueryProcesses result: %s\n", result);} else {printf("HMS_SecurityAudit_QueryProcesses failed with error: %d\n", ret);}if (result != nullptr) {delete[] result;result = nullptr;} -
调用HMS_SecurityAudit_QueryAllProcesses接口,获取所有的应用进程信息。
char *result = nullptr;int32_t ret = HMS_SecurityAudit_QueryAllProcesses(&result);if (ret == 0 && result != nullptr) {printf("HMS_SecurityAudit_QueryAllProcesses result: %s\n", result);} else {printf("HMS_SecurityAudit_QueryAllProcesses failed with error: %d\n", ret);}if (result != nullptr) {delete[] result;result = nullptr;}
-