1 /* 2 * Copyright (c) 2022 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16 #ifndef PROCESS_JS_PROCESS_H 17 #define PROCESS_JS_PROCESS_H 18 19 #include <cstring> 20 #include <map> 21 #include <sys/time.h> 22 23 #include "napi/native_api.h" 24 #include "napi/native_node_api.h" 25 26 namespace OHOS::JsSysModule::Process { 27 using ClearRefCallback = void (*)(napi_env env); 28 enum class PromiseRejectionEvent : uint32_t { REJECT = 0, HANDLE }; 29 class Process { 30 public: 31 /** 32 * Create process object 33 */ Process()34 explicit Process() {} 35 36 /** 37 * Process destructor. 38 */ ~Process()39 virtual ~Process() {} 40 41 /** 42 * Get process uid. 43 * 44 * @param env The parameter is NAPI environment variables. 45 */ 46 napi_value GetUid(napi_env env) const; 47 48 /** 49 * Get the user ID of the process. 50 * 51 * @param env The parameter is NAPI environment variables. 52 */ 53 napi_value GetGid(napi_env env) const; 54 55 /** 56 * Get the effective user identity of the process. 57 * 58 * @param env The parameter is NAPI environment variables. 59 */ 60 napi_value GetEUid(napi_env env) const; 61 62 /** 63 * Get the effective group ID of the process. 64 * 65 * @param env The parameter is NAPI environment variables. 66 */ 67 napi_value GetEGid(napi_env env) const; 68 69 /** 70 * Get an array with supplementary group ids. 71 * 72 * @param env The parameter is NAPI environment variables.s 73 */ 74 napi_value GetGroups(napi_env env) const; 75 76 /** 77 * Get the pid of the current process. 78 * 79 * @param env The parameter is NAPI environment variables. 80 */ 81 napi_value GetPid(napi_env env) const; 82 83 /** 84 * Get the pid of the parent process of the current process. 85 * 86 * @param env The parameter is NAPI environment variables. 87 */ 88 napi_value GetPpid(napi_env env) const; 89 90 /** 91 * Change the current working directory of the process. 92 * 93 * @param env The parameter is NAPI environment variables. 94 * @param args The parameter is the path. 95 */ 96 void Chdir(napi_env env, napi_value args) const; 97 98 /** 99 * Get the number of seconds the current system has been running. 100 * 101 * @param env The parameter is NAPI environment variables. 102 */ 103 napi_value Uptime(napi_env env) const; 104 105 /** 106 * Send a signal to the specified process and end the specified process. 107 * 108 * @param env The parameter is NAPI environment variables. 109 * @param signal The parameter is the signal sent. 110 * @param proid The parameter is the id of the process. 111 */ 112 napi_value Kill(napi_env env, napi_value signal, napi_value proid); 113 114 /** 115 * Causes the process to exit immediately and generate a core file. 116 */ 117 void Abort() const; 118 119 /** 120 * Store user-triggered events. 121 * 122 * @param env The parameter is NAPI environment variables. 123 * @param str The parameter is type of storage event. 124 * @param function The parameter is callback event. 125 */ 126 void On(napi_env env, napi_value str, napi_value function); 127 128 /** 129 * Delete user-stored events. 130 * 131 * @param env The parameter is NAPI environment variables. 132 * @param str The parameter is the type of delete event. 133 */ 134 napi_value Off(napi_env env, napi_value str); 135 136 /** 137 * Terminate the program. 138 * 139 * @param env The parameter is NAPI environment variables. 140 * @param number The parameter is the exit code of the process. 141 */ 142 void Exit(napi_env env, napi_value number) const; 143 144 /** 145 * Use this method to get the working directory of the process. 146 * 147 * @param env The parameter is NAPI environment variables. 148 */ 149 napi_value Cwd(napi_env env) const; 150 151 /** 152 * Get the tid of the current process. 153 * 154 * @param env The parameter is NAPI environment variables. 155 */ 156 napi_value GetTid(napi_env env) const; 157 158 /** 159 * Determines whether the process is isolated. 160 * 161 * @param env The parameter is NAPI environment variables. 162 */ 163 napi_value IsIsolatedProcess(napi_env env) const; 164 165 /** 166 * Determine whether the uid belongs to the application. 167 * 168 * @param env The parameter is NAPI environment variables. 169 * @param uid The parameter is the uid of the application. 170 */ 171 napi_value IsAppUid(napi_env env, napi_value uid) const; 172 173 /** 174 * Determine whether the operating environment is 64-bit. 175 * 176 * @param env The parameter is NAPI environment variables. 177 */ 178 napi_value Is64Bit(napi_env env) const; 179 180 /** 181 * Get process uid by process name. 182 * 183 * @param env The parameter is NAPI environment variables. 184 * @param name The parameter is the process name. 185 */ 186 napi_value GetUidForName(napi_env env, napi_value name) const; 187 188 /** 189 * Get thread priority based on specified tid. 190 * 191 * @param env The parameter is NAPI environment variables. 192 * @param tid The parameter is the specified thread tid. 193 */ 194 napi_value GetThreadPriority(napi_env env, napi_value tid) const; 195 196 /** 197 * Get the real-time elapsed time from system startup to process startup. 198 */ 199 napi_value GetStartRealtime(napi_env env) const; 200 201 /** 202 * Get the CPU time from the process startup to the current time. 203 * 204 * @param env The parameter is NAPI environment variables. 205 */ 206 napi_value GetPastCputime(napi_env env) const; 207 208 /** 209 * Get system configuration information. 210 * 211 * @param env The parameter is NAPI environment variables. 212 * @param name The parameter is the name of the specified system configuration parameter. 213 */ 214 napi_value GetSystemConfig(napi_env env, napi_value name) const; 215 216 /** 217 * Use this method to get the value corresponding to the environment variable. 218 * 219 * @param env The parameter is NAPI environment variables. 220 * @param name The parameter is the environment variable name. 221 */ 222 napi_value GetEnvironmentVar(napi_env env, napi_value name) const; 223 224 /** 225 * Clear references to callbacks. 226 * 227 * @param env The parameter is NAPI environment variables. 228 */ 229 static void ClearReference(napi_env env); 230 231 private: 232 int ConvertTime(time_t tvsec, int64_t tvnsec) const; 233 }; 234 class ProcessManager { 235 public: 236 /** 237 * Create process object. 238 */ ProcessManager()239 explicit ProcessManager() {} 240 241 /** 242 * Process destructor. 243 */ ~ProcessManager()244 virtual ~ProcessManager() {} 245 246 /** 247 * Determine whether the uid belongs to the application. 248 * 249 * @param env The parameter is NAPI environment variables. 250 * @param uid The parameter is the uid of the application. 251 */ 252 napi_value IsAppUid(napi_env env, napi_value uid) const; 253 254 /** 255 * Get process uid by process name. 256 * 257 * @param env The parameter is NAPI environment variables. 258 * @param name The parameter is the process name. 259 */ 260 napi_value GetUidForName(napi_env env, napi_value name) const; 261 262 /** 263 * Get thread priority based on specified tid. 264 * 265 * @param env The parameter is NAPI environment variables. 266 * @param tid The parameter is the specified thread tid. 267 */ 268 napi_value GetThreadPriority(napi_env env, napi_value tid) const; 269 270 /** 271 * Get system configuration information. 272 * 273 * @param env The parameter is NAPI environment variables. 274 * @param name The parameter is the name of the specified system configuration parameter. 275 */ 276 napi_value GetSystemConfig(napi_env env, napi_value name) const; 277 278 /** 279 * Use this method to get the value corresponding to the environment variable. 280 * 281 * @param env The parameter is NAPI environment variables. 282 * @param name The parameter is the environment variable name. 283 */ 284 napi_value GetEnvironmentVar(napi_env env, napi_value name) const; 285 286 /** 287 * Terminate the program. 288 * 289 * @param env The parameter is NAPI environment variables. 290 * @param number The parameter is the exit code of the process. 291 */ 292 void Exit(napi_env env, napi_value number) const; 293 294 /** 295 * Send a signal to the specified process and end the specified process. 296 * 297 * @param env The parameter is NAPI environment variables. 298 * @param signal The parameter is the signal sent. 299 * @param proid The parameter is the id of the process. 300 */ 301 napi_value Kill(napi_env env, napi_value signal, napi_value proid); 302 }; 303 } // namespace OHOS::JsSysModule::Process 304 #endif // PROCESS_JS_PROCESS_H