• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# 获取Native子进程退出信息
2<!--Kit: Ability Kit-->
3<!--Subsystem: Ability-->
4<!--Owner: @SKY2001-->
5<!--Designer: @jsjzju-->
6<!--Tester: @lixueqing513-->
7<!--Adviser: @huipeizi-->
8
9## 场景介绍
10
11从API version 20开始,支持父进程通过注册回调函数监听子进程,获取子进程异常退出信息,以便父进程做后续优化处理。这里支持监听的子进程必须为[OH_Ability_StartNativeChildProcess](../reference/apis-ability-kit/capi-native-child-process-h.md#oh_ability_startnativechildprocess)或[startNativeChildProcess](../reference/apis-ability-kit/js-apis-app-ability-childProcessManager.md#childprocessmanagerstartnativechildprocess13)接口创建的子进程。
12
13## 接口说明
14
15| 名称                                                                                                                                                                                                                                                                                                                                | 描述                                                                                    |
16| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- |
17| [Ability_NativeChildProcess_ErrCode](../reference/apis-ability-kit/capi-native-child-process-h.md#ability_nativechildprocess_errcode) [OH_Ability_RegisterNativeChildProcessExitCallback](../reference/apis-ability-kit/capi-native-child-process-h.md#oh_ability_registernativechildprocessexitcallback) ([OH_Ability_OnNativeChildProcessExit](../reference/apis-ability-kit/capi-native-child-process-h.md#oh_ability_onnativechildprocessexit) onProcessExit) | 注册子进程退出回调函数。 |
18| [Ability_NativeChildProcess_ErrCode](../reference/apis-ability-kit/capi-native-child-process-h.md#ability_nativechildprocess_errcode) [OH_Ability_UnregisterNativeChildProcessExitCallback](../reference/apis-ability-kit/capi-native-child-process-h.md#oh_ability_unregisternativechildprocessexitcallback) ([OH_Ability_OnNativeChildProcessExit](../reference/apis-ability-kit/capi-native-child-process-h.md#oh_ability_onnativechildprocessexit) onProcessExit) | 解注册子进程退出回调函数。 |
19
20## 开发步骤
21
22
23**动态库文件**
24
25```txt
26libchild_process.so
27```
28
29**头文件**
30
31```c++
32#include <AbilityKit/native_child_process.h>
33```
34
351. 主进程-注册和解注册Native子进程异常退出回调。
36
37    调用[OH_Ability_RegisterNativeChildProcessExitCallback](../reference/apis-ability-kit/capi-native-child-process-h.md#oh_ability_registernativechildprocessexitcallback)注册Native子进程,如果返回值为NCP_NO_ERROR表示注册成功。
38    调用[OH_Ability_UnregisterNativeChildProcessExitCallback](../reference/apis-ability-kit/capi-native-child-process-h.md#oh_ability_unregisternativechildprocessexitcallback)解注册Native子进程,如果返回值为NCP_NO_ERROR表示解注册成功。
39
40    ```c++
41    #include <AbilityKit/native_child_process.h>
42    void OnNativeChildProcessExit(int32_t pid, int32_t signal) {
43        OH_LOG_INFO("pid: %{public}d, signal: %{public}d", pid, signal);
44    }
45
46    void RegisterNativeChildProcessExitCallback()
47    {
48        Ability_NativeChildProcess_ErrCode ret = OH_Ability_RegisterNativeChildProcessExitCallback(OnNativeChildProcessExit);
49        if (ret != NCP_NO_ERROR) {
50            OH_LOG_ERROR("register failed.");
51        }
52    }
53
54    void UnregisterNativeChildProcessExitCallback()
55    {
56        Ability_NativeChildProcess_ErrCode ret = OH_Ability_UnregisterNativeChildProcessExitCallback(OnNativeChildProcessExit);
57        if (ret != NCP_NO_ERROR) {
58            OH_LOG_ERROR("unregister failed.");
59        }
60    }
61    ```
62
632. 主进程-添加编译依赖项。
64
65    修改CMaklist.txt添加必要的依赖库,假设主进程所在的so名称为libmainprocesssample.so(主进程和子进程的实现也可以选择编译到同一个动态库文件)。
66
67    ```txt
68    target_link_libraries(mainprocesssample PUBLIC
69        # 添加依赖的元能力动态库
70        libchild_process.so
71       
72        # 其它依赖的动态库
73        # ...
74    )
75    ```
76