14d6c458bSopenharmony_ci/* 24d6c458bSopenharmony_ci * Copyright (c) 2022 Huawei Device Co., Ltd. 34d6c458bSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 44d6c458bSopenharmony_ci * you may not use this file except in compliance with the License. 54d6c458bSopenharmony_ci * You may obtain a copy of the License at 64d6c458bSopenharmony_ci * 74d6c458bSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 84d6c458bSopenharmony_ci * 94d6c458bSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 104d6c458bSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 114d6c458bSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 124d6c458bSopenharmony_ci * See the License for the specific language governing permissions and 134d6c458bSopenharmony_ci * limitations under the License. 144d6c458bSopenharmony_ci */ 154d6c458bSopenharmony_ci 164d6c458bSopenharmony_ci#ifndef PROCESS_JS_PROCESS_H 174d6c458bSopenharmony_ci#define PROCESS_JS_PROCESS_H 184d6c458bSopenharmony_ci 194d6c458bSopenharmony_ci#include <cstring> 204d6c458bSopenharmony_ci#include <map> 214d6c458bSopenharmony_ci#include <sys/time.h> 224d6c458bSopenharmony_ci 234d6c458bSopenharmony_ci#include "napi/native_api.h" 244d6c458bSopenharmony_ci#include "napi/native_node_api.h" 254d6c458bSopenharmony_ci 264d6c458bSopenharmony_cinamespace OHOS::JsSysModule::Process { 274d6c458bSopenharmony_ci using ClearRefCallback = void (*)(napi_env env); 284d6c458bSopenharmony_ci enum class PromiseRejectionEvent : uint32_t { REJECT = 0, HANDLE }; 294d6c458bSopenharmony_ci class Process { 304d6c458bSopenharmony_ci public: 314d6c458bSopenharmony_ci /** 324d6c458bSopenharmony_ci * Create process object 334d6c458bSopenharmony_ci */ 344d6c458bSopenharmony_ci explicit Process() {} 354d6c458bSopenharmony_ci 364d6c458bSopenharmony_ci /** 374d6c458bSopenharmony_ci * Process destructor. 384d6c458bSopenharmony_ci */ 394d6c458bSopenharmony_ci virtual ~Process() {} 404d6c458bSopenharmony_ci 414d6c458bSopenharmony_ci /** 424d6c458bSopenharmony_ci * Get process uid. 434d6c458bSopenharmony_ci * 444d6c458bSopenharmony_ci * @param env The parameter is NAPI environment variables. 454d6c458bSopenharmony_ci */ 464d6c458bSopenharmony_ci napi_value GetUid(napi_env env) const; 474d6c458bSopenharmony_ci 484d6c458bSopenharmony_ci /** 494d6c458bSopenharmony_ci * Get the user ID of the process. 504d6c458bSopenharmony_ci * 514d6c458bSopenharmony_ci * @param env The parameter is NAPI environment variables. 524d6c458bSopenharmony_ci */ 534d6c458bSopenharmony_ci napi_value GetGid(napi_env env) const; 544d6c458bSopenharmony_ci 554d6c458bSopenharmony_ci /** 564d6c458bSopenharmony_ci * Get the effective user identity of the process. 574d6c458bSopenharmony_ci * 584d6c458bSopenharmony_ci * @param env The parameter is NAPI environment variables. 594d6c458bSopenharmony_ci */ 604d6c458bSopenharmony_ci napi_value GetEUid(napi_env env) const; 614d6c458bSopenharmony_ci 624d6c458bSopenharmony_ci /** 634d6c458bSopenharmony_ci * Get the effective group ID of the process. 644d6c458bSopenharmony_ci * 654d6c458bSopenharmony_ci * @param env The parameter is NAPI environment variables. 664d6c458bSopenharmony_ci */ 674d6c458bSopenharmony_ci napi_value GetEGid(napi_env env) const; 684d6c458bSopenharmony_ci 694d6c458bSopenharmony_ci /** 704d6c458bSopenharmony_ci * Get an array with supplementary group ids. 714d6c458bSopenharmony_ci * 724d6c458bSopenharmony_ci * @param env The parameter is NAPI environment variables.s 734d6c458bSopenharmony_ci */ 744d6c458bSopenharmony_ci napi_value GetGroups(napi_env env) const; 754d6c458bSopenharmony_ci 764d6c458bSopenharmony_ci /** 774d6c458bSopenharmony_ci * Get the pid of the current process. 784d6c458bSopenharmony_ci * 794d6c458bSopenharmony_ci * @param env The parameter is NAPI environment variables. 804d6c458bSopenharmony_ci */ 814d6c458bSopenharmony_ci napi_value GetPid(napi_env env) const; 824d6c458bSopenharmony_ci 834d6c458bSopenharmony_ci /** 844d6c458bSopenharmony_ci * Get the pid of the parent process of the current process. 854d6c458bSopenharmony_ci * 864d6c458bSopenharmony_ci * @param env The parameter is NAPI environment variables. 874d6c458bSopenharmony_ci */ 884d6c458bSopenharmony_ci napi_value GetPpid(napi_env env) const; 894d6c458bSopenharmony_ci 904d6c458bSopenharmony_ci /** 914d6c458bSopenharmony_ci * Change the current working directory of the process. 924d6c458bSopenharmony_ci * 934d6c458bSopenharmony_ci * @param env The parameter is NAPI environment variables. 944d6c458bSopenharmony_ci * @param args The parameter is the path. 954d6c458bSopenharmony_ci */ 964d6c458bSopenharmony_ci void Chdir(napi_env env, napi_value args) const; 974d6c458bSopenharmony_ci 984d6c458bSopenharmony_ci /** 994d6c458bSopenharmony_ci * Get the number of seconds the current system has been running. 1004d6c458bSopenharmony_ci * 1014d6c458bSopenharmony_ci * @param env The parameter is NAPI environment variables. 1024d6c458bSopenharmony_ci */ 1034d6c458bSopenharmony_ci napi_value Uptime(napi_env env) const; 1044d6c458bSopenharmony_ci 1054d6c458bSopenharmony_ci /** 1064d6c458bSopenharmony_ci * Send a signal to the specified process and end the specified process. 1074d6c458bSopenharmony_ci * 1084d6c458bSopenharmony_ci * @param env The parameter is NAPI environment variables. 1094d6c458bSopenharmony_ci * @param signal The parameter is the signal sent. 1104d6c458bSopenharmony_ci * @param proid The parameter is the id of the process. 1114d6c458bSopenharmony_ci */ 1124d6c458bSopenharmony_ci napi_value Kill(napi_env env, napi_value signal, napi_value proid); 1134d6c458bSopenharmony_ci 1144d6c458bSopenharmony_ci /** 1154d6c458bSopenharmony_ci * Causes the process to exit immediately and generate a core file. 1164d6c458bSopenharmony_ci */ 1174d6c458bSopenharmony_ci void Abort() const; 1184d6c458bSopenharmony_ci 1194d6c458bSopenharmony_ci /** 1204d6c458bSopenharmony_ci * Store user-triggered events. 1214d6c458bSopenharmony_ci * 1224d6c458bSopenharmony_ci * @param env The parameter is NAPI environment variables. 1234d6c458bSopenharmony_ci * @param str The parameter is type of storage event. 1244d6c458bSopenharmony_ci * @param function The parameter is callback event. 1254d6c458bSopenharmony_ci */ 1264d6c458bSopenharmony_ci void On(napi_env env, napi_value str, napi_value function); 1274d6c458bSopenharmony_ci 1284d6c458bSopenharmony_ci /** 1294d6c458bSopenharmony_ci * Delete user-stored events. 1304d6c458bSopenharmony_ci * 1314d6c458bSopenharmony_ci * @param env The parameter is NAPI environment variables. 1324d6c458bSopenharmony_ci * @param str The parameter is the type of delete event. 1334d6c458bSopenharmony_ci */ 1344d6c458bSopenharmony_ci napi_value Off(napi_env env, napi_value str); 1354d6c458bSopenharmony_ci 1364d6c458bSopenharmony_ci /** 1374d6c458bSopenharmony_ci * Terminate the program. 1384d6c458bSopenharmony_ci * 1394d6c458bSopenharmony_ci * @param env The parameter is NAPI environment variables. 1404d6c458bSopenharmony_ci * @param number The parameter is the exit code of the process. 1414d6c458bSopenharmony_ci */ 1424d6c458bSopenharmony_ci void Exit(napi_env env, napi_value number) const; 1434d6c458bSopenharmony_ci 1444d6c458bSopenharmony_ci /** 1454d6c458bSopenharmony_ci * Use this method to get the working directory of the process. 1464d6c458bSopenharmony_ci * 1474d6c458bSopenharmony_ci * @param env The parameter is NAPI environment variables. 1484d6c458bSopenharmony_ci */ 1494d6c458bSopenharmony_ci napi_value Cwd(napi_env env) const; 1504d6c458bSopenharmony_ci 1514d6c458bSopenharmony_ci /** 1524d6c458bSopenharmony_ci * Get the tid of the current process. 1534d6c458bSopenharmony_ci * 1544d6c458bSopenharmony_ci * @param env The parameter is NAPI environment variables. 1554d6c458bSopenharmony_ci */ 1564d6c458bSopenharmony_ci napi_value GetTid(napi_env env) const; 1574d6c458bSopenharmony_ci 1584d6c458bSopenharmony_ci /** 1594d6c458bSopenharmony_ci * Determines whether the process is isolated. 1604d6c458bSopenharmony_ci * 1614d6c458bSopenharmony_ci * @param env The parameter is NAPI environment variables. 1624d6c458bSopenharmony_ci */ 1634d6c458bSopenharmony_ci napi_value IsIsolatedProcess(napi_env env) const; 1644d6c458bSopenharmony_ci 1654d6c458bSopenharmony_ci /** 1664d6c458bSopenharmony_ci * Determine whether the uid belongs to the application. 1674d6c458bSopenharmony_ci * 1684d6c458bSopenharmony_ci * @param env The parameter is NAPI environment variables. 1694d6c458bSopenharmony_ci * @param uid The parameter is the uid of the application. 1704d6c458bSopenharmony_ci */ 1714d6c458bSopenharmony_ci napi_value IsAppUid(napi_env env, napi_value uid) const; 1724d6c458bSopenharmony_ci 1734d6c458bSopenharmony_ci /** 1744d6c458bSopenharmony_ci * Determine whether the operating environment is 64-bit. 1754d6c458bSopenharmony_ci * 1764d6c458bSopenharmony_ci * @param env The parameter is NAPI environment variables. 1774d6c458bSopenharmony_ci */ 1784d6c458bSopenharmony_ci napi_value Is64Bit(napi_env env) const; 1794d6c458bSopenharmony_ci 1804d6c458bSopenharmony_ci /** 1814d6c458bSopenharmony_ci * Get process uid by process name. 1824d6c458bSopenharmony_ci * 1834d6c458bSopenharmony_ci * @param env The parameter is NAPI environment variables. 1844d6c458bSopenharmony_ci * @param name The parameter is the process name. 1854d6c458bSopenharmony_ci */ 1864d6c458bSopenharmony_ci napi_value GetUidForName(napi_env env, napi_value name) const; 1874d6c458bSopenharmony_ci 1884d6c458bSopenharmony_ci /** 1894d6c458bSopenharmony_ci * Get thread priority based on specified tid. 1904d6c458bSopenharmony_ci * 1914d6c458bSopenharmony_ci * @param env The parameter is NAPI environment variables. 1924d6c458bSopenharmony_ci * @param tid The parameter is the specified thread tid. 1934d6c458bSopenharmony_ci */ 1944d6c458bSopenharmony_ci napi_value GetThreadPriority(napi_env env, napi_value tid) const; 1954d6c458bSopenharmony_ci 1964d6c458bSopenharmony_ci /** 1974d6c458bSopenharmony_ci * Get the real-time elapsed time from system startup to process startup. 1984d6c458bSopenharmony_ci */ 1994d6c458bSopenharmony_ci napi_value GetStartRealtime(napi_env env) const; 2004d6c458bSopenharmony_ci 2014d6c458bSopenharmony_ci /** 2024d6c458bSopenharmony_ci * Get the CPU time from the process startup to the current time. 2034d6c458bSopenharmony_ci * 2044d6c458bSopenharmony_ci * @param env The parameter is NAPI environment variables. 2054d6c458bSopenharmony_ci */ 2064d6c458bSopenharmony_ci napi_value GetPastCputime(napi_env env) const; 2074d6c458bSopenharmony_ci 2084d6c458bSopenharmony_ci /** 2094d6c458bSopenharmony_ci * Get system configuration information. 2104d6c458bSopenharmony_ci * 2114d6c458bSopenharmony_ci * @param env The parameter is NAPI environment variables. 2124d6c458bSopenharmony_ci * @param name The parameter is the name of the specified system configuration parameter. 2134d6c458bSopenharmony_ci */ 2144d6c458bSopenharmony_ci napi_value GetSystemConfig(napi_env env, napi_value name) const; 2154d6c458bSopenharmony_ci 2164d6c458bSopenharmony_ci /** 2174d6c458bSopenharmony_ci * Use this method to get the value corresponding to the environment variable. 2184d6c458bSopenharmony_ci * 2194d6c458bSopenharmony_ci * @param env The parameter is NAPI environment variables. 2204d6c458bSopenharmony_ci * @param name The parameter is the environment variable name. 2214d6c458bSopenharmony_ci */ 2224d6c458bSopenharmony_ci napi_value GetEnvironmentVar(napi_env env, napi_value name) const; 2234d6c458bSopenharmony_ci 2244d6c458bSopenharmony_ci /** 2254d6c458bSopenharmony_ci * Clear references to callbacks. 2264d6c458bSopenharmony_ci * 2274d6c458bSopenharmony_ci * @param env The parameter is NAPI environment variables. 2284d6c458bSopenharmony_ci */ 2294d6c458bSopenharmony_ci static void ClearReference(napi_env env); 2304d6c458bSopenharmony_ci 2314d6c458bSopenharmony_ci private: 2324d6c458bSopenharmony_ci int ConvertTime(time_t tvsec, int64_t tvnsec) const; 2334d6c458bSopenharmony_ci }; 2344d6c458bSopenharmony_ci class ProcessManager { 2354d6c458bSopenharmony_ci public: 2364d6c458bSopenharmony_ci /** 2374d6c458bSopenharmony_ci * Create process object. 2384d6c458bSopenharmony_ci */ 2394d6c458bSopenharmony_ci explicit ProcessManager() {} 2404d6c458bSopenharmony_ci 2414d6c458bSopenharmony_ci /** 2424d6c458bSopenharmony_ci * Process destructor. 2434d6c458bSopenharmony_ci */ 2444d6c458bSopenharmony_ci virtual ~ProcessManager() {} 2454d6c458bSopenharmony_ci 2464d6c458bSopenharmony_ci /** 2474d6c458bSopenharmony_ci * Determine whether the uid belongs to the application. 2484d6c458bSopenharmony_ci * 2494d6c458bSopenharmony_ci * @param env The parameter is NAPI environment variables. 2504d6c458bSopenharmony_ci * @param uid The parameter is the uid of the application. 2514d6c458bSopenharmony_ci */ 2524d6c458bSopenharmony_ci napi_value IsAppUid(napi_env env, napi_value uid) const; 2534d6c458bSopenharmony_ci 2544d6c458bSopenharmony_ci /** 2554d6c458bSopenharmony_ci * Get process uid by process name. 2564d6c458bSopenharmony_ci * 2574d6c458bSopenharmony_ci * @param env The parameter is NAPI environment variables. 2584d6c458bSopenharmony_ci * @param name The parameter is the process name. 2594d6c458bSopenharmony_ci */ 2604d6c458bSopenharmony_ci napi_value GetUidForName(napi_env env, napi_value name) const; 2614d6c458bSopenharmony_ci 2624d6c458bSopenharmony_ci /** 2634d6c458bSopenharmony_ci * Get thread priority based on specified tid. 2644d6c458bSopenharmony_ci * 2654d6c458bSopenharmony_ci * @param env The parameter is NAPI environment variables. 2664d6c458bSopenharmony_ci * @param tid The parameter is the specified thread tid. 2674d6c458bSopenharmony_ci */ 2684d6c458bSopenharmony_ci napi_value GetThreadPriority(napi_env env, napi_value tid) const; 2694d6c458bSopenharmony_ci 2704d6c458bSopenharmony_ci /** 2714d6c458bSopenharmony_ci * Get system configuration information. 2724d6c458bSopenharmony_ci * 2734d6c458bSopenharmony_ci * @param env The parameter is NAPI environment variables. 2744d6c458bSopenharmony_ci * @param name The parameter is the name of the specified system configuration parameter. 2754d6c458bSopenharmony_ci */ 2764d6c458bSopenharmony_ci napi_value GetSystemConfig(napi_env env, napi_value name) const; 2774d6c458bSopenharmony_ci 2784d6c458bSopenharmony_ci /** 2794d6c458bSopenharmony_ci * Use this method to get the value corresponding to the environment variable. 2804d6c458bSopenharmony_ci * 2814d6c458bSopenharmony_ci * @param env The parameter is NAPI environment variables. 2824d6c458bSopenharmony_ci * @param name The parameter is the environment variable name. 2834d6c458bSopenharmony_ci */ 2844d6c458bSopenharmony_ci napi_value GetEnvironmentVar(napi_env env, napi_value name) const; 2854d6c458bSopenharmony_ci 2864d6c458bSopenharmony_ci /** 2874d6c458bSopenharmony_ci * Terminate the program. 2884d6c458bSopenharmony_ci * 2894d6c458bSopenharmony_ci * @param env The parameter is NAPI environment variables. 2904d6c458bSopenharmony_ci * @param number The parameter is the exit code of the process. 2914d6c458bSopenharmony_ci */ 2924d6c458bSopenharmony_ci void Exit(napi_env env, napi_value number) const; 2934d6c458bSopenharmony_ci 2944d6c458bSopenharmony_ci /** 2954d6c458bSopenharmony_ci * Send a signal to the specified process and end the specified process. 2964d6c458bSopenharmony_ci * 2974d6c458bSopenharmony_ci * @param env The parameter is NAPI environment variables. 2984d6c458bSopenharmony_ci * @param signal The parameter is the signal sent. 2994d6c458bSopenharmony_ci * @param proid The parameter is the id of the process. 3004d6c458bSopenharmony_ci */ 3014d6c458bSopenharmony_ci napi_value Kill(napi_env env, napi_value signal, napi_value proid); 3024d6c458bSopenharmony_ci }; 3034d6c458bSopenharmony_ci} // namespace OHOS::JsSysModule::Process 3044d6c458bSopenharmony_ci#endif // PROCESS_JS_PROCESS_H