• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# ChildProcess
2
3
4## 概述
5
6提供子进程的管理能力,支持创建Native子进程并在父子进程间建立IPC通道,用于实现多进程应用开发。
7
8**系统能力:** SystemCapability.Ability.AbilityRuntime.Core
9
10**起始版本:** 12
11
12
13## 汇总
14
15
16### 文件
17
18| 名称                                                     | 描述                                                                                                     |
19| ------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ |
20| [native_child_process.h](native__child__process_8h.md) | 支持创建Native子进程,并在父子进程间建立IPC通道。<br>引用文件:<AbilityKit/native_child_process.h><br>库:libchild_process.so<br> |
21
22### 类型定义
23
24| 名称                                                                                                                                               | 描述                |
25| ------------------------------------------------------------------------------------------------------------------------------------------------ | ----------------- |
26| typedef enum Ability_NativeChildProcess_ErrCode [Ability_NativeChildProcess_ErrCode](#ability_nativechildprocess_errcode)                        | 定义Native子进程模块错误码。 |
27| typedef void(\* [OH_Ability_OnNativeChildProcessStarted](#oh_ability_onnativechildprocessstarted)) (int errCode, OHIPCRemoteProxy \*remoteProxy) | 定义通知子进程启动结果的回调函数。 |
28
29
30### 枚举
31
32| 名称                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               | 描述                |
33| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------- |
34| [Ability_NativeChildProcess_ErrCode](#ability_nativechildprocess_errcode) {<br>    NCP_NO_ERROR = 0,<br>    NCP_ERR_INVALID_PARAM = 401,<br>    NCP_ERR_NOT_SUPPORTED = 801,<br>    NCP_ERR_INTERNAL = 16000050,<br>    NCP_ERR_BUSY = 16010001,<br>    NCP_ERR_TIMEOUT = 16010002,<br>    NCP_ERR_SERVICE_ERROR = 16010003,<br>    NCP_ERR_MULTI_PROCESS_DISABLED = 16010004,<br>    NCP_ERR_ALREADY_IN_CHILD = 16010005,<br>    NCP_ERR_MAX_CHILD_PROCESSES_REACHED = 16010006,<br>    NCP_ERR_LIB_LOADING_FAILED = 16010007,<br>    NCP_ERR_CONNECTION_FAILED = 16010008<br>} | 定义Native子进程模块错误码。 |
35
36
37### 函数
38
39| 名称                                                                                                                                                                                                         | 描述                                                                                    |
40| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- |
41| int [OH_Ability_CreateNativeChildProcess](#oh_ability_createnativechildprocess) (const char \*libName, [OH_Ability_OnNativeChildProcessStarted](#oh_ability_onnativechildprocessstarted) onProcessStarted) | 创建子进程并加载参数中指定的动态链接库文件,进程启动结果通过回调参数异步通知,需注意回调通知为独立线程,回调函数实现需要注意线程同步,且不能执行高耗时操作避免长时间阻塞。 |
42
43> **说明:**
44>
45> 当前仅支持2in1设备,且单个进程只能启动一个Native子进程。
46
47## 类型定义说明
48### OH_Ability_OnNativeChildProcessStarted
49
50```
51typedef void (*OH_Ability_OnNativeChildProcessStarted)(int errCode, OHIPCRemoteProxy *remoteProxy)
52```
53
54**描述**
55
56通知子进程启动结果的回调函数。
57
58**起始版本:** 12
59
60**参数:**
61
62| 名称          | 描述                                                                                                                                                                                                                                  |
63| ----------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
64| errCode     | NCP_NO_ERROR - 创建子进程成功<br>NCP_ERR_LIB_LOADING_FAILED - 加载动态库文件失败或动态库中未实现必要的导出函数<br>NCP_ERR_CONNECTION_FAILED - 动态库中实现的OnConnect方法未返回有效的IPC Stub指针<br>详见[Ability_NativeChildProcess_ErrCode](#ability_nativechildprocess_errcode)定义。 |
65| remoteProxy | 子进程的IPC对象指针,出现异常时可能为nullptr; 使用完毕后需要调用[OH_IPCRemoteProxy_Destory](../apis-ipc-kit/_o_h_i_p_c_remote_object.md#oh_ipcremoteproxy_destroy)方法释放。                                                                                       |
66
67**参见:**
68
69[OH_Ability_CreateNativeChildProcess](#oh_ability_createnativechildprocess)
70
71[OH_IPCRemoteProxy_Destory](../apis-ipc-kit/_o_h_i_p_c_remote_object.md#oh_ipcremoteproxy_destroy)
72
73
74
75## 枚举类型说明
76
77### Ability_NativeChildProcess_ErrCode
78
79```
80enum Ability_NativeChildProcess_ErrCode
81```
82
83**描述**
84
85定义Native子进程模块错误码。
86
87**起始版本:** 12
88
89| 枚举值                                 | 描述                                              |
90| ----------------------------------- | ----------------------------------------------- |
91| NCP_NO_ERROR                        | 操作成功。                                           |
92| NCP_ERR_INVALID_PARAM               | 无效参数。                                           |
93| NCP_ERR_NOT_SUPPORTED               | 不支持创建Native子进程。                                 |
94| NCP_ERR_INTERNAL                    | 内部错误。                                           |
95| NCP_ERR_BUSY                        | 在Native子进程的启动过程中不能再次创建新的子进程,可以等待当前子进程启动完成后再次尝试。 |
96| NCP_ERR_TIMEOUT                     | 启动Native子进程超时。                                  |
97| NCP_ERR_SERVICE_ERROR               | 服务端出错。                                          |
98| NCP_ERR_MULTI_PROCESS_DISABLED      | 多进程模式已关闭,不允许启动子进程。                              |
99| NCP_ERR_ALREADY_IN_CHILD            | 不允许在子进程中再次创建进程。                                 |
100| NCP_ERR_MAX_CHILD_PROCESSES_REACHED | 到达最大Native子进程数量限制,不能再创建子进程。                     |
101| NCP_ERR_LIB_LOADING_FAILED          | 子进程加载动态库失败,文件不存在或者未实现对应的方法并导出。                  |
102| NCP_ERR_CONNECTION_FAILED           | 子进程调用动态库的OnConnect方法失败,可能返回了无效的IPC对象指针。         |
103
104
105## 函数说明
106
107### OH_Ability_CreateNativeChildProcess
108
109```
110int OH_Ability_CreateNativeChildProcess (const char *libName, OH_Ability_OnNativeChildProcessStarted onProcessStarted )
111```
112
113**描述**:
114
115创建子进程并加载参数中指定的动态链接库文件,进程启动结果通过回调参数异步通知,需注意回调通知为独立线程,回调函数实现需要注意线程同步,且不能执行高耗时操作避免长时间阻塞。
116
117参数所指定的动态库必须实现并导出下列函数:
118
119	1. OHIPCRemoteStub* NativeChildProcess_OnConnect()
120	2. void NativeChildProcess_MainProc()
121
122处理逻辑顺序如下列伪代码所示:
123
124	主进程:
125	1. OH_Ability_CreateNativeChildProcess(libName, onProcessStartedCallback)
126
127	子进程 :
128	2. dlopen(libName)
129	3. dlsym("NativeChildProcess_OnConnect")
130	4. dlsym("NativeChildProcess_MainProc")
131	5. ipcRemote = NativeChildProcess_OnConnect()
132	6. NativeChildProcess_MainProc()
133
134	主进程 :
135	7. onProcessStartedCallback(ipcRemote, errCode)
136
137	子进程 :
138	8. 在NativeChildProcess_MainProc()函数返回后子进程退出。
139
140> **说明:**
141>
142> 当前仅支持2in1设备,且单个进程只能启动一个Native子进程。
143
144**起始版本:** 12
145
146**参数**:
147
148| 名称                       | 描述                                                                                                              |
149| ------------------------ | --------------------------------------------------------------------------------------------------------------- |
150| libName                  | 子进程中加载的动态库文件名称,不能为nullptr。                                                                                      |
151| onProcessStartedCallback | 通知子进程启动结果的回调函数指针,不能为nullptr,详见[OH_Ability_OnNativeChildProcessStarted](#oh_ability_onnativechildprocessstarted) |
152
153
154**返回**:
155
156执行成功返回NCP_NO_ERROR,失败返回错误码,详见[Ability_NativeChildProcess_ErrCode](#ability_nativechildprocess_errcode)。
157
158