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#include <cassert> 174d6c458bSopenharmony_ci#include <vector> 184d6c458bSopenharmony_ci#include <grp.h> 194d6c458bSopenharmony_ci#include <sys/types.h> 204d6c458bSopenharmony_ci#include <unistd.h> 214d6c458bSopenharmony_ci#include "js_childprocess.h" 224d6c458bSopenharmony_ci#include "js_process.h" 234d6c458bSopenharmony_ci#include "securec.h" 244d6c458bSopenharmony_ci#include "tools/log.h" 254d6c458bSopenharmony_ci 264d6c458bSopenharmony_cinamespace OHOS::JsSysModule::Process { 274d6c458bSopenharmony_ci static napi_value DealType(napi_env env, napi_value args[], size_t argc) 284d6c458bSopenharmony_ci { 294d6c458bSopenharmony_ci if (argc > 0) { 304d6c458bSopenharmony_ci napi_valuetype valueType = napi_undefined; 314d6c458bSopenharmony_ci napi_typeof(env, args[0], &valueType); 324d6c458bSopenharmony_ci NAPI_ASSERT(env, valueType == napi_string, "Wrong argument type: string expected."); 334d6c458bSopenharmony_ci } else { 344d6c458bSopenharmony_ci HILOG_ERROR("command is null"); 354d6c458bSopenharmony_ci napi_throw_error(env, "", "command is empty"); 364d6c458bSopenharmony_ci return nullptr; 374d6c458bSopenharmony_ci } 384d6c458bSopenharmony_ci 394d6c458bSopenharmony_ci std::vector<std::string> keyStr = {"timeout", "killSignal", "maxBuffer"}; 404d6c458bSopenharmony_ci 414d6c458bSopenharmony_ci if (argc < 2) { // 2:The number of parameters is 2 424d6c458bSopenharmony_ci return nullptr; 434d6c458bSopenharmony_ci } 444d6c458bSopenharmony_ci size_t size = keyStr.size(); 454d6c458bSopenharmony_ci for (size_t i = 0; i < size; i++) { 464d6c458bSopenharmony_ci napi_valuetype propertyType = napi_undefined; 474d6c458bSopenharmony_ci napi_value property = nullptr; 484d6c458bSopenharmony_ci napi_get_named_property(env, args[1], keyStr[i].c_str(), &property); 494d6c458bSopenharmony_ci switch (i) { 504d6c458bSopenharmony_ci case 0: 514d6c458bSopenharmony_ci { 524d6c458bSopenharmony_ci napi_typeof(env, property, &propertyType); 534d6c458bSopenharmony_ci NAPI_ASSERT(env, propertyType == napi_number || propertyType == napi_undefined || 544d6c458bSopenharmony_ci propertyType == napi_null, "Wrong timeout argument type: number expected."); 554d6c458bSopenharmony_ci int timeout = 0; 564d6c458bSopenharmony_ci napi_get_value_int32(env, property, &timeout); 574d6c458bSopenharmony_ci if (timeout < 0) { 584d6c458bSopenharmony_ci NAPI_CALL(env, napi_throw_error(env, "", "options timeout is lessthen zero")); 594d6c458bSopenharmony_ci return nullptr; 604d6c458bSopenharmony_ci } 614d6c458bSopenharmony_ci break; 624d6c458bSopenharmony_ci } 634d6c458bSopenharmony_ci case 1: 644d6c458bSopenharmony_ci napi_typeof(env, property, &propertyType); 654d6c458bSopenharmony_ci NAPI_ASSERT(env, propertyType == napi_string || propertyType == napi_number 664d6c458bSopenharmony_ci || propertyType == napi_undefined || propertyType == napi_null, 674d6c458bSopenharmony_ci "Wrong KillSignal argument type: string or number expected."); 684d6c458bSopenharmony_ci break; 694d6c458bSopenharmony_ci case 2: // 2:The parameter value 704d6c458bSopenharmony_ci napi_typeof(env, property, &propertyType); 714d6c458bSopenharmony_ci NAPI_ASSERT(env, propertyType == napi_number || propertyType == napi_undefined || 724d6c458bSopenharmony_ci propertyType == napi_null, "Wrong maxBuffer argument type: number expected."); 734d6c458bSopenharmony_ci break; 744d6c458bSopenharmony_ci default: 754d6c458bSopenharmony_ci break; 764d6c458bSopenharmony_ci } 774d6c458bSopenharmony_ci } 784d6c458bSopenharmony_ci return nullptr; 794d6c458bSopenharmony_ci } 804d6c458bSopenharmony_ci 814d6c458bSopenharmony_ci static napi_value ChildProcessConstructor(napi_env env, napi_callback_info info) 824d6c458bSopenharmony_ci { 834d6c458bSopenharmony_ci napi_value thisVar = nullptr; 844d6c458bSopenharmony_ci void* data = nullptr; 854d6c458bSopenharmony_ci size_t argc = 2; // 2:The number of parameters is 2 864d6c458bSopenharmony_ci napi_value args[2] = { nullptr }; // 2:The number of parameters is 2 874d6c458bSopenharmony_ci NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, &thisVar, &data)); 884d6c458bSopenharmony_ci 894d6c458bSopenharmony_ci DealType(env, args, argc); 904d6c458bSopenharmony_ci auto objectInfo = new ChildProcess(); 914d6c458bSopenharmony_ci 924d6c458bSopenharmony_ci objectInfo->InitOptionsInfo(env, args[1]); 934d6c458bSopenharmony_ci 944d6c458bSopenharmony_ci objectInfo->Spawn(env, args[0]); 954d6c458bSopenharmony_ci 964d6c458bSopenharmony_ci NAPI_CALL(env, napi_wrap( 974d6c458bSopenharmony_ci env, thisVar, objectInfo, 984d6c458bSopenharmony_ci [](napi_env env, void* data, void* hint) { 994d6c458bSopenharmony_ci auto objectResult = reinterpret_cast<ChildProcess*>(data); 1004d6c458bSopenharmony_ci if (objectResult != nullptr) { 1014d6c458bSopenharmony_ci delete objectResult; 1024d6c458bSopenharmony_ci objectResult = nullptr; 1034d6c458bSopenharmony_ci } 1044d6c458bSopenharmony_ci }, 1054d6c458bSopenharmony_ci nullptr, nullptr)); 1064d6c458bSopenharmony_ci 1074d6c458bSopenharmony_ci return thisVar; 1084d6c458bSopenharmony_ci } 1094d6c458bSopenharmony_ci 1104d6c458bSopenharmony_ci static napi_value Wait(napi_env env, napi_callback_info info) 1114d6c458bSopenharmony_ci { 1124d6c458bSopenharmony_ci napi_value thisVar = nullptr; 1134d6c458bSopenharmony_ci NAPI_CALL(env, napi_get_cb_info(env, info, nullptr, nullptr, &thisVar, nullptr)); 1144d6c458bSopenharmony_ci 1154d6c458bSopenharmony_ci ChildProcess* object = nullptr; 1164d6c458bSopenharmony_ci NAPI_CALL(env, napi_unwrap(env, thisVar, reinterpret_cast<void**>(&object))); 1174d6c458bSopenharmony_ci napi_value result = object->Wait(env); 1184d6c458bSopenharmony_ci 1194d6c458bSopenharmony_ci return result; 1204d6c458bSopenharmony_ci } 1214d6c458bSopenharmony_ci 1224d6c458bSopenharmony_ci static napi_value GetOutput(napi_env env, napi_callback_info info) 1234d6c458bSopenharmony_ci { 1244d6c458bSopenharmony_ci napi_value thisVar = nullptr; 1254d6c458bSopenharmony_ci NAPI_CALL(env, napi_get_cb_info(env, info, nullptr, nullptr, &thisVar, nullptr)); 1264d6c458bSopenharmony_ci 1274d6c458bSopenharmony_ci ChildProcess* object = nullptr; 1284d6c458bSopenharmony_ci NAPI_CALL(env, napi_unwrap(env, thisVar, reinterpret_cast<void**>(&object))); 1294d6c458bSopenharmony_ci napi_value result = object->GetOutput(env); 1304d6c458bSopenharmony_ci 1314d6c458bSopenharmony_ci return result; 1324d6c458bSopenharmony_ci } 1334d6c458bSopenharmony_ci 1344d6c458bSopenharmony_ci static napi_value Close(napi_env env, napi_callback_info info) 1354d6c458bSopenharmony_ci { 1364d6c458bSopenharmony_ci napi_value thisVar = nullptr; 1374d6c458bSopenharmony_ci NAPI_CALL(env, napi_get_cb_info(env, info, nullptr, nullptr, &thisVar, nullptr)); 1384d6c458bSopenharmony_ci 1394d6c458bSopenharmony_ci ChildProcess* object = nullptr; 1404d6c458bSopenharmony_ci NAPI_CALL(env, napi_unwrap(env, thisVar, reinterpret_cast<void**>(&object))); 1414d6c458bSopenharmony_ci object->Close(); 1424d6c458bSopenharmony_ci 1434d6c458bSopenharmony_ci napi_value result = nullptr; 1444d6c458bSopenharmony_ci NAPI_CALL(env, napi_get_undefined(env, &result)); 1454d6c458bSopenharmony_ci return result; 1464d6c458bSopenharmony_ci } 1474d6c458bSopenharmony_ci 1484d6c458bSopenharmony_ci static napi_value GetErrorOutput(napi_env env, napi_callback_info info) 1494d6c458bSopenharmony_ci { 1504d6c458bSopenharmony_ci napi_value thisVar = nullptr; 1514d6c458bSopenharmony_ci NAPI_CALL(env, napi_get_cb_info(env, info, nullptr, nullptr, &thisVar, nullptr)); 1524d6c458bSopenharmony_ci 1534d6c458bSopenharmony_ci ChildProcess* object = nullptr; 1544d6c458bSopenharmony_ci NAPI_CALL(env, napi_unwrap(env, thisVar, reinterpret_cast<void**>(&object))); 1554d6c458bSopenharmony_ci 1564d6c458bSopenharmony_ci napi_value result = object->GetErrorOutput(env); 1574d6c458bSopenharmony_ci 1584d6c458bSopenharmony_ci return result; 1594d6c458bSopenharmony_ci } 1604d6c458bSopenharmony_ci 1614d6c458bSopenharmony_ci static napi_value Kill(napi_env env, napi_callback_info info) 1624d6c458bSopenharmony_ci { 1634d6c458bSopenharmony_ci napi_value thisVar = nullptr; 1644d6c458bSopenharmony_ci size_t requireArgc = 1; 1654d6c458bSopenharmony_ci size_t argc = 1; 1664d6c458bSopenharmony_ci napi_value args = nullptr; 1674d6c458bSopenharmony_ci NAPI_CALL(env, napi_get_cb_info(env, info, &argc, &args, &thisVar, nullptr)); 1684d6c458bSopenharmony_ci 1694d6c458bSopenharmony_ci NAPI_ASSERT(env, argc >= requireArgc, "Wrong number of arguments"); 1704d6c458bSopenharmony_ci 1714d6c458bSopenharmony_ci napi_valuetype valuetype; 1724d6c458bSopenharmony_ci NAPI_CALL(env, napi_typeof(env, args, &valuetype)); 1734d6c458bSopenharmony_ci if ((valuetype != napi_valuetype::napi_number) && (valuetype != napi_valuetype::napi_string)) { 1744d6c458bSopenharmony_ci napi_throw_error(env, nullptr, "The parameter type is incorrect"); 1754d6c458bSopenharmony_ci return nullptr; 1764d6c458bSopenharmony_ci } 1774d6c458bSopenharmony_ci 1784d6c458bSopenharmony_ci ChildProcess* object = nullptr; 1794d6c458bSopenharmony_ci NAPI_CALL(env, napi_unwrap(env, thisVar, reinterpret_cast<void**>(&object))); 1804d6c458bSopenharmony_ci object->Kill(env, args); 1814d6c458bSopenharmony_ci 1824d6c458bSopenharmony_ci napi_value result = nullptr; 1834d6c458bSopenharmony_ci NAPI_CALL(env, napi_get_undefined(env, &result)); 1844d6c458bSopenharmony_ci return result; 1854d6c458bSopenharmony_ci } 1864d6c458bSopenharmony_ci 1874d6c458bSopenharmony_ci static napi_value GetKilled(napi_env env, napi_callback_info info) 1884d6c458bSopenharmony_ci { 1894d6c458bSopenharmony_ci napi_value thisVar = nullptr; 1904d6c458bSopenharmony_ci NAPI_CALL(env, napi_get_cb_info(env, info, nullptr, nullptr, &thisVar, nullptr)); 1914d6c458bSopenharmony_ci 1924d6c458bSopenharmony_ci ChildProcess* object = nullptr; 1934d6c458bSopenharmony_ci NAPI_CALL(env, napi_unwrap(env, thisVar, reinterpret_cast<void**>(&object))); 1944d6c458bSopenharmony_ci napi_value result = object->GetKilled(env); 1954d6c458bSopenharmony_ci 1964d6c458bSopenharmony_ci return result; 1974d6c458bSopenharmony_ci } 1984d6c458bSopenharmony_ci 1994d6c458bSopenharmony_ci static napi_value Getpid(napi_env env, napi_callback_info info) 2004d6c458bSopenharmony_ci { 2014d6c458bSopenharmony_ci napi_value thisVar = nullptr; 2024d6c458bSopenharmony_ci NAPI_CALL(env, napi_get_cb_info(env, info, nullptr, nullptr, &thisVar, nullptr)); 2034d6c458bSopenharmony_ci 2044d6c458bSopenharmony_ci ChildProcess* object = nullptr; 2054d6c458bSopenharmony_ci NAPI_CALL(env, napi_unwrap(env, thisVar, reinterpret_cast<void**>(&object))); 2064d6c458bSopenharmony_ci napi_value result = object->Getpid(env); 2074d6c458bSopenharmony_ci 2084d6c458bSopenharmony_ci return result; 2094d6c458bSopenharmony_ci } 2104d6c458bSopenharmony_ci 2114d6c458bSopenharmony_ci static napi_value Getppid(napi_env env, napi_callback_info info) 2124d6c458bSopenharmony_ci { 2134d6c458bSopenharmony_ci napi_value thisVar = nullptr; 2144d6c458bSopenharmony_ci NAPI_CALL(env, napi_get_cb_info(env, info, nullptr, nullptr, &thisVar, nullptr)); 2154d6c458bSopenharmony_ci 2164d6c458bSopenharmony_ci ChildProcess* object = nullptr; 2174d6c458bSopenharmony_ci NAPI_CALL(env, napi_unwrap(env, thisVar, reinterpret_cast<void**>(&object))); 2184d6c458bSopenharmony_ci napi_value result = object->Getppid(env); 2194d6c458bSopenharmony_ci 2204d6c458bSopenharmony_ci return result; 2214d6c458bSopenharmony_ci } 2224d6c458bSopenharmony_ci 2234d6c458bSopenharmony_ci static napi_value GetExitCode(napi_env env, napi_callback_info info) 2244d6c458bSopenharmony_ci { 2254d6c458bSopenharmony_ci napi_value thisVar = nullptr; 2264d6c458bSopenharmony_ci NAPI_CALL(env, napi_get_cb_info(env, info, nullptr, nullptr, &thisVar, nullptr)); 2274d6c458bSopenharmony_ci 2284d6c458bSopenharmony_ci ChildProcess* object = nullptr; 2294d6c458bSopenharmony_ci NAPI_CALL(env, napi_unwrap(env, thisVar, reinterpret_cast<void**>(&object))); 2304d6c458bSopenharmony_ci napi_value result = object->GetExitCode(env); 2314d6c458bSopenharmony_ci 2324d6c458bSopenharmony_ci return result; 2334d6c458bSopenharmony_ci } 2344d6c458bSopenharmony_ci 2354d6c458bSopenharmony_ci static napi_value RunCommand(napi_env env, napi_callback_info info) 2364d6c458bSopenharmony_ci { 2374d6c458bSopenharmony_ci napi_value thisVar = nullptr; 2384d6c458bSopenharmony_ci size_t argc = 2; // 2:The number of parameters is 2 2394d6c458bSopenharmony_ci napi_value args[2] = { nullptr }; // 2:The number of parameters is 2 2404d6c458bSopenharmony_ci NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, &thisVar, nullptr)); 2414d6c458bSopenharmony_ci 2424d6c458bSopenharmony_ci const char* childProcessClassName = "ChildProcess"; 2434d6c458bSopenharmony_ci napi_value childProcessClass = nullptr; 2444d6c458bSopenharmony_ci napi_property_descriptor childProcessDesc[] = { 2454d6c458bSopenharmony_ci DECLARE_NAPI_FUNCTION("close", Close), 2464d6c458bSopenharmony_ci DECLARE_NAPI_FUNCTION("kill", Kill), 2474d6c458bSopenharmony_ci DECLARE_NAPI_FUNCTION("getOutput", GetOutput), 2484d6c458bSopenharmony_ci DECLARE_NAPI_FUNCTION("getErrorOutput", GetErrorOutput), 2494d6c458bSopenharmony_ci DECLARE_NAPI_FUNCTION("wait", Wait), 2504d6c458bSopenharmony_ci DECLARE_NAPI_GETTER("killed", GetKilled), 2514d6c458bSopenharmony_ci DECLARE_NAPI_GETTER("pid", Getpid), 2524d6c458bSopenharmony_ci DECLARE_NAPI_GETTER("ppid", Getppid), 2534d6c458bSopenharmony_ci DECLARE_NAPI_GETTER("exitCode", GetExitCode), 2544d6c458bSopenharmony_ci }; 2554d6c458bSopenharmony_ci 2564d6c458bSopenharmony_ci NAPI_CALL(env, napi_define_class(env, childProcessClassName, strlen(childProcessClassName), 2574d6c458bSopenharmony_ci ChildProcessConstructor, nullptr, 2584d6c458bSopenharmony_ci sizeof(childProcessDesc) / sizeof(childProcessDesc[0]), childProcessDesc, 2594d6c458bSopenharmony_ci &childProcessClass)); 2604d6c458bSopenharmony_ci 2614d6c458bSopenharmony_ci napi_value result = nullptr; 2624d6c458bSopenharmony_ci NAPI_CALL(env, napi_new_instance(env, childProcessClass, argc, args, &result)); 2634d6c458bSopenharmony_ci 2644d6c458bSopenharmony_ci return result; 2654d6c458bSopenharmony_ci } 2664d6c458bSopenharmony_ci 2674d6c458bSopenharmony_ci static napi_value GetUid(napi_env env, [[maybe_unused]] napi_callback_info info) 2684d6c458bSopenharmony_ci { 2694d6c458bSopenharmony_ci Process object; 2704d6c458bSopenharmony_ci return object.GetUid(env); 2714d6c458bSopenharmony_ci } 2724d6c458bSopenharmony_ci 2734d6c458bSopenharmony_ci static napi_value GetGid(napi_env env, [[maybe_unused]] napi_callback_info info) 2744d6c458bSopenharmony_ci { 2754d6c458bSopenharmony_ci Process object; 2764d6c458bSopenharmony_ci return object.GetGid(env); 2774d6c458bSopenharmony_ci } 2784d6c458bSopenharmony_ci 2794d6c458bSopenharmony_ci static napi_value GetEUid(napi_env env, [[maybe_unused]] napi_callback_info info) 2804d6c458bSopenharmony_ci { 2814d6c458bSopenharmony_ci Process object; 2824d6c458bSopenharmony_ci return object.GetEUid(env); 2834d6c458bSopenharmony_ci } 2844d6c458bSopenharmony_ci 2854d6c458bSopenharmony_ci static napi_value GetEGid(napi_env env, [[maybe_unused]] napi_callback_info info) 2864d6c458bSopenharmony_ci { 2874d6c458bSopenharmony_ci Process object; 2884d6c458bSopenharmony_ci return object.GetEGid(env); 2894d6c458bSopenharmony_ci } 2904d6c458bSopenharmony_ci 2914d6c458bSopenharmony_ci static napi_value GetGroups(napi_env env, [[maybe_unused]] napi_callback_info info) 2924d6c458bSopenharmony_ci { 2934d6c458bSopenharmony_ci Process object; 2944d6c458bSopenharmony_ci return object.GetGroups(env); 2954d6c458bSopenharmony_ci } 2964d6c458bSopenharmony_ci 2974d6c458bSopenharmony_ci static napi_value GetPid(napi_env env, [[maybe_unused]] napi_callback_info info) 2984d6c458bSopenharmony_ci { 2994d6c458bSopenharmony_ci Process object; 3004d6c458bSopenharmony_ci return object.GetPid(env); 3014d6c458bSopenharmony_ci } 3024d6c458bSopenharmony_ci 3034d6c458bSopenharmony_ci static napi_value GetPpid(napi_env env, [[maybe_unused]] napi_callback_info info) 3044d6c458bSopenharmony_ci { 3054d6c458bSopenharmony_ci Process object; 3064d6c458bSopenharmony_ci return object.GetPpid(env); 3074d6c458bSopenharmony_ci } 3084d6c458bSopenharmony_ci 3094d6c458bSopenharmony_ci static napi_value Chdir(napi_env env, napi_callback_info info) 3104d6c458bSopenharmony_ci { 3114d6c458bSopenharmony_ci napi_value thisVar = nullptr; 3124d6c458bSopenharmony_ci size_t requireArgc = 1; 3134d6c458bSopenharmony_ci size_t argc = 1; 3144d6c458bSopenharmony_ci napi_value args = nullptr; 3154d6c458bSopenharmony_ci NAPI_CALL(env, napi_get_cb_info(env, info, &argc, &args, &thisVar, nullptr)); 3164d6c458bSopenharmony_ci NAPI_ASSERT(env, argc >= requireArgc, "Wrong nuamber of arguments"); 3174d6c458bSopenharmony_ci napi_valuetype valuetype; 3184d6c458bSopenharmony_ci NAPI_CALL(env, napi_typeof(env, args, &valuetype)); 3194d6c458bSopenharmony_ci NAPI_ASSERT(env, valuetype == napi_string, "Wrong argument type. String expected"); 3204d6c458bSopenharmony_ci Process object; 3214d6c458bSopenharmony_ci object.Chdir(env, args); 3224d6c458bSopenharmony_ci napi_value result = nullptr; 3234d6c458bSopenharmony_ci NAPI_CALL(env, napi_get_undefined(env, &result)); 3244d6c458bSopenharmony_ci return result; 3254d6c458bSopenharmony_ci } 3264d6c458bSopenharmony_ci 3274d6c458bSopenharmony_ci static napi_value Abort(napi_env env, [[maybe_unused]] napi_callback_info info) 3284d6c458bSopenharmony_ci { 3294d6c458bSopenharmony_ci Process object; 3304d6c458bSopenharmony_ci object.Abort(); 3314d6c458bSopenharmony_ci napi_value res = nullptr; 3324d6c458bSopenharmony_ci NAPI_CALL(env, napi_get_undefined(env, &res)); 3334d6c458bSopenharmony_ci return res; 3344d6c458bSopenharmony_ci } 3354d6c458bSopenharmony_ci 3364d6c458bSopenharmony_ci static napi_value Cwd(napi_env env, [[maybe_unused]] napi_callback_info info) 3374d6c458bSopenharmony_ci { 3384d6c458bSopenharmony_ci Process object; 3394d6c458bSopenharmony_ci return object.Cwd(env); 3404d6c458bSopenharmony_ci } 3414d6c458bSopenharmony_ci 3424d6c458bSopenharmony_ci static napi_value Exit(napi_env env, napi_callback_info info) 3434d6c458bSopenharmony_ci { 3444d6c458bSopenharmony_ci napi_value thisVar = nullptr; 3454d6c458bSopenharmony_ci size_t argc = 1; 3464d6c458bSopenharmony_ci napi_value args = nullptr; 3474d6c458bSopenharmony_ci napi_get_cb_info(env, info, &argc, &args, &thisVar, nullptr); 3484d6c458bSopenharmony_ci napi_valuetype valuetype; 3494d6c458bSopenharmony_ci NAPI_CALL(env, napi_typeof(env, args, &valuetype)); 3504d6c458bSopenharmony_ci NAPI_ASSERT(env, valuetype == napi_number, "Wrong argument type.number error"); 3514d6c458bSopenharmony_ci Process object; 3524d6c458bSopenharmony_ci object.Exit(env, args); 3534d6c458bSopenharmony_ci napi_value res = nullptr; 3544d6c458bSopenharmony_ci NAPI_CALL(env, napi_get_undefined(env, &res)); 3554d6c458bSopenharmony_ci return res; 3564d6c458bSopenharmony_ci } 3574d6c458bSopenharmony_ci static napi_value On(napi_env env, napi_callback_info info) 3584d6c458bSopenharmony_ci { 3594d6c458bSopenharmony_ci napi_value thisVar = nullptr; 3604d6c458bSopenharmony_ci bool flag = true; 3614d6c458bSopenharmony_ci napi_value result = nullptr; 3624d6c458bSopenharmony_ci size_t requireArgc = 2; // 2:The number of parameters is 2 3634d6c458bSopenharmony_ci size_t argc = 2; // 2:The number of parameters is 2 3644d6c458bSopenharmony_ci napi_value args[2] = { nullptr }; 3654d6c458bSopenharmony_ci NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, &thisVar, nullptr)); 3664d6c458bSopenharmony_ci NAPI_ASSERT(env, argc >= requireArgc, "Wrong number of arguments"); 3674d6c458bSopenharmony_ci napi_valuetype valuetype0; 3684d6c458bSopenharmony_ci NAPI_CALL(env, napi_typeof(env, args[0], &valuetype0)); 3694d6c458bSopenharmony_ci if (valuetype0 != napi_valuetype::napi_string) { 3704d6c458bSopenharmony_ci flag = false; 3714d6c458bSopenharmony_ci NAPI_CALL(env, napi_get_boolean(env, flag, &result)); 3724d6c458bSopenharmony_ci return result; 3734d6c458bSopenharmony_ci } 3744d6c458bSopenharmony_ci napi_valuetype valuetype1; 3754d6c458bSopenharmony_ci NAPI_CALL(env, napi_typeof(env, args[1], &valuetype1)); 3764d6c458bSopenharmony_ci Process object; 3774d6c458bSopenharmony_ci object.On(env, args[0], args[1]); 3784d6c458bSopenharmony_ci NAPI_CALL(env, napi_get_boolean(env, flag, &result)); 3794d6c458bSopenharmony_ci return result; 3804d6c458bSopenharmony_ci } 3814d6c458bSopenharmony_ci 3824d6c458bSopenharmony_ci static napi_value Off(napi_env env, napi_callback_info info) 3834d6c458bSopenharmony_ci { 3844d6c458bSopenharmony_ci napi_value thisVar = nullptr; 3854d6c458bSopenharmony_ci size_t argc = 1; 3864d6c458bSopenharmony_ci napi_value args = nullptr; 3874d6c458bSopenharmony_ci napi_get_cb_info(env, info, &argc, &args, &thisVar, nullptr); 3884d6c458bSopenharmony_ci Process object; 3894d6c458bSopenharmony_ci napi_value result = object.Off(env, args); 3904d6c458bSopenharmony_ci return result; 3914d6c458bSopenharmony_ci } 3924d6c458bSopenharmony_ci 3934d6c458bSopenharmony_ci static napi_value Uptime(napi_env env, [[maybe_unused]] napi_callback_info info) 3944d6c458bSopenharmony_ci { 3954d6c458bSopenharmony_ci Process object; 3964d6c458bSopenharmony_ci return object.Uptime(env); 3974d6c458bSopenharmony_ci } 3984d6c458bSopenharmony_ci 3994d6c458bSopenharmony_ci static napi_value KillSig(napi_env env, napi_callback_info info) 4004d6c458bSopenharmony_ci { 4014d6c458bSopenharmony_ci size_t argc = 2; // 2:The number of parameters is 2 4024d6c458bSopenharmony_ci napi_value argv[2] = {0}; // 2:The number of parameters is 2 4034d6c458bSopenharmony_ci napi_value thisVar = nullptr; 4044d6c458bSopenharmony_ci void* data = nullptr; 4054d6c458bSopenharmony_ci napi_get_cb_info(env, info, &argc, argv, &thisVar, &data); 4064d6c458bSopenharmony_ci Process object; 4074d6c458bSopenharmony_ci napi_value result = nullptr; 4084d6c458bSopenharmony_ci result = object.Kill(env, argv[0], argv[1]); 4094d6c458bSopenharmony_ci return result; 4104d6c458bSopenharmony_ci } 4114d6c458bSopenharmony_ci static napi_value GetTid(napi_env env, [[maybe_unused]] napi_callback_info info) 4124d6c458bSopenharmony_ci { 4134d6c458bSopenharmony_ci Process object; 4144d6c458bSopenharmony_ci return object.GetTid(env); 4154d6c458bSopenharmony_ci } 4164d6c458bSopenharmony_ci 4174d6c458bSopenharmony_ci static napi_value IsIsolatedProcess(napi_env env, [[maybe_unused]] napi_callback_info info) 4184d6c458bSopenharmony_ci { 4194d6c458bSopenharmony_ci Process object; 4204d6c458bSopenharmony_ci return object.IsIsolatedProcess(env); 4214d6c458bSopenharmony_ci } 4224d6c458bSopenharmony_ci 4234d6c458bSopenharmony_ci static napi_value IsAppUid(napi_env env, napi_callback_info info) 4244d6c458bSopenharmony_ci { 4254d6c458bSopenharmony_ci napi_value thisVar = nullptr; 4264d6c458bSopenharmony_ci size_t argc = 1; 4274d6c458bSopenharmony_ci napi_value args = nullptr; 4284d6c458bSopenharmony_ci napi_get_cb_info(env, info, &argc, &args, &thisVar, nullptr); 4294d6c458bSopenharmony_ci napi_valuetype valuetype; 4304d6c458bSopenharmony_ci NAPI_CALL(env, napi_typeof(env, args, &valuetype)); 4314d6c458bSopenharmony_ci NAPI_ASSERT(env, valuetype == napi_number, "Wrong argument type: number expected."); 4324d6c458bSopenharmony_ci Process object; 4334d6c458bSopenharmony_ci return object.IsAppUid(env, args); 4344d6c458bSopenharmony_ci } 4354d6c458bSopenharmony_ci 4364d6c458bSopenharmony_ci static napi_value Is64Bit(napi_env env, [[maybe_unused]] napi_callback_info info) 4374d6c458bSopenharmony_ci { 4384d6c458bSopenharmony_ci Process object; 4394d6c458bSopenharmony_ci return object.Is64Bit(env); 4404d6c458bSopenharmony_ci } 4414d6c458bSopenharmony_ci 4424d6c458bSopenharmony_ci static napi_value GetUidForName(napi_env env, napi_callback_info info) 4434d6c458bSopenharmony_ci { 4444d6c458bSopenharmony_ci napi_value thisVar = nullptr; 4454d6c458bSopenharmony_ci size_t argc = 1; 4464d6c458bSopenharmony_ci napi_value args = nullptr; 4474d6c458bSopenharmony_ci napi_get_cb_info(env, info, &argc, &args, &thisVar, nullptr); 4484d6c458bSopenharmony_ci napi_valuetype valuetype; 4494d6c458bSopenharmony_ci NAPI_CALL(env, napi_typeof(env, args, &valuetype)); 4504d6c458bSopenharmony_ci NAPI_ASSERT(env, valuetype == napi_string, "Wrong argument type: string expected."); 4514d6c458bSopenharmony_ci Process object; 4524d6c458bSopenharmony_ci return object.GetUidForName(env, args); 4534d6c458bSopenharmony_ci } 4544d6c458bSopenharmony_ci 4554d6c458bSopenharmony_ci static napi_value GetThreadPriority(napi_env env, napi_callback_info info) 4564d6c458bSopenharmony_ci { 4574d6c458bSopenharmony_ci napi_value thisVar = nullptr; 4584d6c458bSopenharmony_ci size_t argc = 1; 4594d6c458bSopenharmony_ci napi_value args = nullptr; 4604d6c458bSopenharmony_ci napi_get_cb_info(env, info, &argc, &args, &thisVar, nullptr); 4614d6c458bSopenharmony_ci napi_valuetype valuetype; 4624d6c458bSopenharmony_ci NAPI_CALL(env, napi_typeof(env, args, &valuetype)); 4634d6c458bSopenharmony_ci NAPI_ASSERT(env, valuetype == napi_number, "Wrong argument type: number expected."); 4644d6c458bSopenharmony_ci Process object; 4654d6c458bSopenharmony_ci return object.GetThreadPriority(env, args); 4664d6c458bSopenharmony_ci } 4674d6c458bSopenharmony_ci 4684d6c458bSopenharmony_ci static napi_value GetStartRealtime(napi_env env, [[maybe_unused]] napi_callback_info info) 4694d6c458bSopenharmony_ci { 4704d6c458bSopenharmony_ci Process object; 4714d6c458bSopenharmony_ci return object.GetStartRealtime(env); 4724d6c458bSopenharmony_ci } 4734d6c458bSopenharmony_ci 4744d6c458bSopenharmony_ci static napi_value GetPastCputime(napi_env env, [[maybe_unused]] napi_callback_info info) 4754d6c458bSopenharmony_ci { 4764d6c458bSopenharmony_ci Process object; 4774d6c458bSopenharmony_ci return object.GetPastCputime(env); 4784d6c458bSopenharmony_ci } 4794d6c458bSopenharmony_ci 4804d6c458bSopenharmony_ci static napi_value GetSystemConfig(napi_env env, napi_callback_info info) 4814d6c458bSopenharmony_ci { 4824d6c458bSopenharmony_ci napi_value thisVar = nullptr; 4834d6c458bSopenharmony_ci size_t argc = 1; 4844d6c458bSopenharmony_ci napi_value args = nullptr; 4854d6c458bSopenharmony_ci napi_get_cb_info(env, info, &argc, &args, &thisVar, nullptr); 4864d6c458bSopenharmony_ci napi_valuetype valuetype; 4874d6c458bSopenharmony_ci NAPI_CALL(env, napi_typeof(env, args, &valuetype)); 4884d6c458bSopenharmony_ci NAPI_ASSERT(env, valuetype == napi_number, "Wrong argument type: number expected."); 4894d6c458bSopenharmony_ci Process object; 4904d6c458bSopenharmony_ci return object.GetSystemConfig(env, args); 4914d6c458bSopenharmony_ci } 4924d6c458bSopenharmony_ci 4934d6c458bSopenharmony_ci static napi_value GetEnvironmentVar(napi_env env, napi_callback_info info) 4944d6c458bSopenharmony_ci { 4954d6c458bSopenharmony_ci napi_value thisVar = nullptr; 4964d6c458bSopenharmony_ci size_t argc = 1; 4974d6c458bSopenharmony_ci napi_value args = nullptr; 4984d6c458bSopenharmony_ci napi_get_cb_info(env, info, &argc, &args, &thisVar, nullptr); 4994d6c458bSopenharmony_ci napi_valuetype valuetype; 5004d6c458bSopenharmony_ci NAPI_CALL(env, napi_typeof(env, args, &valuetype)); 5014d6c458bSopenharmony_ci NAPI_ASSERT(env, valuetype == napi_string, "Wrong argument type: string expected."); 5024d6c458bSopenharmony_ci Process object; 5034d6c458bSopenharmony_ci return object.GetEnvironmentVar(env, args); 5044d6c458bSopenharmony_ci } 5054d6c458bSopenharmony_ci 5064d6c458bSopenharmony_ci static napi_value ThrowError(napi_env env, const char* errMessage) 5074d6c458bSopenharmony_ci { 5084d6c458bSopenharmony_ci napi_value processError = nullptr; 5094d6c458bSopenharmony_ci napi_value code = nullptr; 5104d6c458bSopenharmony_ci uint32_t errCode = 401; // 401:The code parameter of this error is 401 5114d6c458bSopenharmony_ci napi_create_uint32(env, errCode, &code); 5124d6c458bSopenharmony_ci napi_value name = nullptr; 5134d6c458bSopenharmony_ci std::string errName = "BuisnessError"; 5144d6c458bSopenharmony_ci napi_value msg = nullptr; 5154d6c458bSopenharmony_ci napi_create_string_utf8(env, errMessage, NAPI_AUTO_LENGTH, &msg); 5164d6c458bSopenharmony_ci napi_create_string_utf8(env, errName.c_str(), NAPI_AUTO_LENGTH, &name); 5174d6c458bSopenharmony_ci napi_create_error(env, nullptr, msg, &processError); 5184d6c458bSopenharmony_ci napi_set_named_property(env, processError, "code", code); 5194d6c458bSopenharmony_ci napi_set_named_property(env, processError, "name", name); 5204d6c458bSopenharmony_ci napi_throw(env, processError); 5214d6c458bSopenharmony_ci napi_value res = nullptr; 5224d6c458bSopenharmony_ci NAPI_CALL(env, napi_get_undefined(env, &res)); 5234d6c458bSopenharmony_ci return res; 5244d6c458bSopenharmony_ci } 5254d6c458bSopenharmony_ci 5264d6c458bSopenharmony_ci static napi_value GetValueFromInfo(napi_env env, napi_callback_info info, napi_value &thisVar) 5274d6c458bSopenharmony_ci { 5284d6c458bSopenharmony_ci size_t argc = 1; 5294d6c458bSopenharmony_ci napi_value args = nullptr; 5304d6c458bSopenharmony_ci napi_get_cb_info(env, info, &argc, &args, &thisVar, nullptr); 5314d6c458bSopenharmony_ci return args; 5324d6c458bSopenharmony_ci } 5334d6c458bSopenharmony_ci 5344d6c458bSopenharmony_ci static napi_value KillSigOfProcess(napi_env env, napi_callback_info info) 5354d6c458bSopenharmony_ci { 5364d6c458bSopenharmony_ci size_t argc = 2; // 2:The number of parameters is 2 5374d6c458bSopenharmony_ci napi_value argv[2] = {0}; // 2:The number of parameters is 2 5384d6c458bSopenharmony_ci napi_value thisVar = nullptr; 5394d6c458bSopenharmony_ci void* data = nullptr; 5404d6c458bSopenharmony_ci napi_get_cb_info(env, info, &argc, argv, &thisVar, &data); 5414d6c458bSopenharmony_ci napi_valuetype valuetype0; 5424d6c458bSopenharmony_ci NAPI_CALL(env, napi_typeof(env, argv[0], &valuetype0)); 5434d6c458bSopenharmony_ci napi_valuetype valuetype1; 5444d6c458bSopenharmony_ci NAPI_CALL(env, napi_typeof(env, argv[1], &valuetype1)); 5454d6c458bSopenharmony_ci if (valuetype0 != napi_number || valuetype1 != napi_number) { 5464d6c458bSopenharmony_ci return ThrowError(env, "Parameter error. The type of signal or pid must be number."); 5474d6c458bSopenharmony_ci } 5484d6c458bSopenharmony_ci ProcessManager *object = nullptr; 5494d6c458bSopenharmony_ci NAPI_CALL(env, napi_unwrap(env, thisVar, (void**)&object)); 5504d6c458bSopenharmony_ci return object->Kill(env, argv[0], argv[1]); 5514d6c458bSopenharmony_ci } 5524d6c458bSopenharmony_ci static napi_value ExitOfProcess(napi_env env, napi_callback_info info) 5534d6c458bSopenharmony_ci { 5544d6c458bSopenharmony_ci napi_value thisVar = nullptr; 5554d6c458bSopenharmony_ci napi_value args = GetValueFromInfo(env, info, thisVar); 5564d6c458bSopenharmony_ci napi_valuetype valuetype; 5574d6c458bSopenharmony_ci NAPI_CALL(env, napi_typeof(env, args, &valuetype)); 5584d6c458bSopenharmony_ci if (valuetype != napi_number) { 5594d6c458bSopenharmony_ci return ThrowError(env, "Parameter error. The type of code must be number."); 5604d6c458bSopenharmony_ci } 5614d6c458bSopenharmony_ci ProcessManager *object = nullptr; 5624d6c458bSopenharmony_ci NAPI_CALL(env, napi_unwrap(env, thisVar, (void**)&object)); 5634d6c458bSopenharmony_ci object->Exit(env, args); 5644d6c458bSopenharmony_ci napi_value res = nullptr; 5654d6c458bSopenharmony_ci NAPI_CALL(env, napi_get_undefined(env, &res)); 5664d6c458bSopenharmony_ci return res; 5674d6c458bSopenharmony_ci } 5684d6c458bSopenharmony_ci static napi_value GetSystemConfigOfProcess(napi_env env, napi_callback_info info) 5694d6c458bSopenharmony_ci { 5704d6c458bSopenharmony_ci napi_value thisVar = nullptr; 5714d6c458bSopenharmony_ci napi_value args = GetValueFromInfo(env, info, thisVar); 5724d6c458bSopenharmony_ci napi_valuetype valuetype; 5734d6c458bSopenharmony_ci NAPI_CALL(env, napi_typeof(env, args, &valuetype)); 5744d6c458bSopenharmony_ci if (valuetype != napi_number) { 5754d6c458bSopenharmony_ci return ThrowError(env, "Parameter error. The type of name must be number."); 5764d6c458bSopenharmony_ci } 5774d6c458bSopenharmony_ci ProcessManager *object = nullptr; 5784d6c458bSopenharmony_ci NAPI_CALL(env, napi_unwrap(env, thisVar, (void**)&object)); 5794d6c458bSopenharmony_ci return object->GetSystemConfig(env, args); 5804d6c458bSopenharmony_ci } 5814d6c458bSopenharmony_ci 5824d6c458bSopenharmony_ci static napi_value GetThreadPriorityOfProcess(napi_env env, napi_callback_info info) 5834d6c458bSopenharmony_ci { 5844d6c458bSopenharmony_ci napi_value thisVar = nullptr; 5854d6c458bSopenharmony_ci napi_value args = GetValueFromInfo(env, info, thisVar); 5864d6c458bSopenharmony_ci napi_valuetype valuetype; 5874d6c458bSopenharmony_ci NAPI_CALL(env, napi_typeof(env, args, &valuetype)); 5884d6c458bSopenharmony_ci if (valuetype != napi_number) { 5894d6c458bSopenharmony_ci return ThrowError(env, "Parameter error. The type of code must be number."); 5904d6c458bSopenharmony_ci } 5914d6c458bSopenharmony_ci ProcessManager *object = nullptr; 5924d6c458bSopenharmony_ci NAPI_CALL(env, napi_unwrap(env, thisVar, (void**)&object)); 5934d6c458bSopenharmony_ci return object->GetThreadPriority(env, args); 5944d6c458bSopenharmony_ci } 5954d6c458bSopenharmony_ci 5964d6c458bSopenharmony_ci static napi_value GetUidForNameOfProcess(napi_env env, napi_callback_info info) 5974d6c458bSopenharmony_ci { 5984d6c458bSopenharmony_ci napi_value thisVar = nullptr; 5994d6c458bSopenharmony_ci napi_value args = GetValueFromInfo(env, info, thisVar); 6004d6c458bSopenharmony_ci napi_valuetype valuetype; 6014d6c458bSopenharmony_ci NAPI_CALL(env, napi_typeof(env, args, &valuetype)); 6024d6c458bSopenharmony_ci if (valuetype != napi_string) { 6034d6c458bSopenharmony_ci return ThrowError(env, "Parameter error. The type of code must be string."); 6044d6c458bSopenharmony_ci } 6054d6c458bSopenharmony_ci ProcessManager *object = nullptr; 6064d6c458bSopenharmony_ci NAPI_CALL(env, napi_unwrap(env, thisVar, (void**)&object)); 6074d6c458bSopenharmony_ci return object->GetUidForName(env, args); 6084d6c458bSopenharmony_ci } 6094d6c458bSopenharmony_ci 6104d6c458bSopenharmony_ci static napi_value IsAppUidOfProcess(napi_env env, napi_callback_info info) 6114d6c458bSopenharmony_ci { 6124d6c458bSopenharmony_ci napi_value thisVar = nullptr; 6134d6c458bSopenharmony_ci napi_value args = GetValueFromInfo(env, info, thisVar); 6144d6c458bSopenharmony_ci napi_valuetype valuetype; 6154d6c458bSopenharmony_ci NAPI_CALL(env, napi_typeof(env, args, &valuetype)); 6164d6c458bSopenharmony_ci if (valuetype != napi_number) { 6174d6c458bSopenharmony_ci return ThrowError(env, "Parameter error. The type of code must be number."); 6184d6c458bSopenharmony_ci } 6194d6c458bSopenharmony_ci ProcessManager *object = nullptr; 6204d6c458bSopenharmony_ci NAPI_CALL(env, napi_unwrap(env, thisVar, (void**)&object)); 6214d6c458bSopenharmony_ci return object->IsAppUid(env, args); 6224d6c458bSopenharmony_ci } 6234d6c458bSopenharmony_ci 6244d6c458bSopenharmony_ci static napi_value GetEnvironmentVarOfProcess(napi_env env, napi_callback_info info) 6254d6c458bSopenharmony_ci { 6264d6c458bSopenharmony_ci napi_value thisVar = nullptr; 6274d6c458bSopenharmony_ci napi_value args = GetValueFromInfo(env, info, thisVar); 6284d6c458bSopenharmony_ci napi_valuetype valuetype; 6294d6c458bSopenharmony_ci NAPI_CALL(env, napi_typeof(env, args, &valuetype)); 6304d6c458bSopenharmony_ci if (valuetype != napi_string) { 6314d6c458bSopenharmony_ci return ThrowError(env, "Parameter error. The type of name must be string."); 6324d6c458bSopenharmony_ci } 6334d6c458bSopenharmony_ci ProcessManager *object = nullptr; 6344d6c458bSopenharmony_ci NAPI_CALL(env, napi_unwrap(env, thisVar, (void**)&object)); 6354d6c458bSopenharmony_ci return object->GetEnvironmentVar(env, args); 6364d6c458bSopenharmony_ci } 6374d6c458bSopenharmony_ci 6384d6c458bSopenharmony_ci static napi_value ProcessManagerConstructor(napi_env env, napi_callback_info info) 6394d6c458bSopenharmony_ci { 6404d6c458bSopenharmony_ci napi_value thisVar = nullptr; 6414d6c458bSopenharmony_ci void *data = nullptr; 6424d6c458bSopenharmony_ci NAPI_CALL(env, napi_get_cb_info(env, info, nullptr, nullptr, &thisVar, &data)); 6434d6c458bSopenharmony_ci auto objectInfo = new ProcessManager(); 6444d6c458bSopenharmony_ci napi_wrap( 6454d6c458bSopenharmony_ci env, thisVar, objectInfo, 6464d6c458bSopenharmony_ci [](napi_env environment, void *data, void *hint) { 6474d6c458bSopenharmony_ci auto objInfo = reinterpret_cast<ProcessManager*>(data); 6484d6c458bSopenharmony_ci if (objInfo != nullptr) { 6494d6c458bSopenharmony_ci delete objInfo; 6504d6c458bSopenharmony_ci } 6514d6c458bSopenharmony_ci }, 6524d6c458bSopenharmony_ci nullptr, nullptr); 6534d6c458bSopenharmony_ci return thisVar; 6544d6c458bSopenharmony_ci } 6554d6c458bSopenharmony_ci 6564d6c458bSopenharmony_ci static napi_value ProcessInit(napi_env env, napi_value exports) 6574d6c458bSopenharmony_ci { 6584d6c458bSopenharmony_ci const char *procssClassName = "ProcessManager"; 6594d6c458bSopenharmony_ci napi_value processClass = nullptr; 6604d6c458bSopenharmony_ci napi_property_descriptor processDesc[] = { 6614d6c458bSopenharmony_ci DECLARE_NAPI_FUNCTION("kill", KillSigOfProcess), 6624d6c458bSopenharmony_ci DECLARE_NAPI_FUNCTION("exit", ExitOfProcess), 6634d6c458bSopenharmony_ci DECLARE_NAPI_FUNCTION("isAppUid", IsAppUidOfProcess), 6644d6c458bSopenharmony_ci DECLARE_NAPI_FUNCTION("getUidForName", GetUidForNameOfProcess), 6654d6c458bSopenharmony_ci DECLARE_NAPI_FUNCTION("getThreadPriority", GetThreadPriorityOfProcess), 6664d6c458bSopenharmony_ci DECLARE_NAPI_FUNCTION("getSystemConfig", GetSystemConfigOfProcess), 6674d6c458bSopenharmony_ci DECLARE_NAPI_FUNCTION("getEnvironmentVar", GetEnvironmentVarOfProcess), 6684d6c458bSopenharmony_ci }; 6694d6c458bSopenharmony_ci NAPI_CALL(env, napi_define_class(env, procssClassName, strlen(procssClassName), ProcessManagerConstructor, 6704d6c458bSopenharmony_ci nullptr, sizeof(processDesc) / sizeof(processDesc[0]), 6714d6c458bSopenharmony_ci processDesc, &processClass)); 6724d6c458bSopenharmony_ci napi_property_descriptor desc[] = { 6734d6c458bSopenharmony_ci DECLARE_NAPI_PROPERTY("ProcessManager", processClass) 6744d6c458bSopenharmony_ci }; 6754d6c458bSopenharmony_ci napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc); 6764d6c458bSopenharmony_ci return exports; 6774d6c458bSopenharmony_ci } 6784d6c458bSopenharmony_ci static napi_value Init(napi_env env, napi_value exports) 6794d6c458bSopenharmony_ci { 6804d6c458bSopenharmony_ci Process object; 6814d6c458bSopenharmony_ci napi_property_descriptor desc[] = { 6824d6c458bSopenharmony_ci DECLARE_NAPI_FUNCTION("runCmd", RunCommand), 6834d6c458bSopenharmony_ci DECLARE_NAPI_GETTER("uid", GetUid), 6844d6c458bSopenharmony_ci DECLARE_NAPI_GETTER("gid", GetGid), 6854d6c458bSopenharmony_ci DECLARE_NAPI_GETTER("euid", GetEUid), 6864d6c458bSopenharmony_ci DECLARE_NAPI_GETTER("egid", GetEGid), 6874d6c458bSopenharmony_ci DECLARE_NAPI_GETTER("groups", GetGroups), 6884d6c458bSopenharmony_ci DECLARE_NAPI_GETTER("pid", GetPid), 6894d6c458bSopenharmony_ci DECLARE_NAPI_GETTER("ppid", GetPpid), 6904d6c458bSopenharmony_ci DECLARE_NAPI_FUNCTION("uptime", Uptime), 6914d6c458bSopenharmony_ci DECLARE_NAPI_FUNCTION("kill", KillSig), 6924d6c458bSopenharmony_ci DECLARE_NAPI_FUNCTION("chdir", Chdir), 6934d6c458bSopenharmony_ci DECLARE_NAPI_FUNCTION("abort", Abort), 6944d6c458bSopenharmony_ci DECLARE_NAPI_FUNCTION("cwd", Cwd), 6954d6c458bSopenharmony_ci DECLARE_NAPI_FUNCTION("on", On), 6964d6c458bSopenharmony_ci DECLARE_NAPI_FUNCTION("off", Off), 6974d6c458bSopenharmony_ci DECLARE_NAPI_FUNCTION("exit", Exit), 6984d6c458bSopenharmony_ci DECLARE_NAPI_GETTER("tid", GetTid), 6994d6c458bSopenharmony_ci DECLARE_NAPI_FUNCTION("getStartRealtime", GetStartRealtime), 7004d6c458bSopenharmony_ci DECLARE_NAPI_FUNCTION("getPastCpuTime", GetPastCputime), 7014d6c458bSopenharmony_ci DECLARE_NAPI_FUNCTION("isIsolatedProcess", IsIsolatedProcess), 7024d6c458bSopenharmony_ci DECLARE_NAPI_FUNCTION("is64Bit", Is64Bit), 7034d6c458bSopenharmony_ci DECLARE_NAPI_FUNCTION("isAppUid", IsAppUid), 7044d6c458bSopenharmony_ci DECLARE_NAPI_FUNCTION("getUidForName", GetUidForName), 7054d6c458bSopenharmony_ci DECLARE_NAPI_FUNCTION("getThreadPriority", GetThreadPriority), 7064d6c458bSopenharmony_ci DECLARE_NAPI_FUNCTION("getSystemConfig", GetSystemConfig), 7074d6c458bSopenharmony_ci DECLARE_NAPI_FUNCTION("getEnvironmentVar", GetEnvironmentVar), 7084d6c458bSopenharmony_ci }; 7094d6c458bSopenharmony_ci NAPI_CALL(env, napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc)); 7104d6c458bSopenharmony_ci ProcessInit(env, exports); 7114d6c458bSopenharmony_ci napi_value obj = nullptr; 7124d6c458bSopenharmony_ci NAPI_CALL(env, napi_create_object(env, &obj)); 7134d6c458bSopenharmony_ci 7144d6c458bSopenharmony_ci NAPI_CALL(env, napi_wrap( 7154d6c458bSopenharmony_ci env, obj, reinterpret_cast<void*>(Process::ClearReference), 7164d6c458bSopenharmony_ci [](napi_env env, void* data, void* hint) { 7174d6c458bSopenharmony_ci if (data != nullptr) { 7184d6c458bSopenharmony_ci ClearRefCallback clearParameters = reinterpret_cast<ClearRefCallback>(data); 7194d6c458bSopenharmony_ci clearParameters(env); 7204d6c458bSopenharmony_ci } 7214d6c458bSopenharmony_ci }, 7224d6c458bSopenharmony_ci nullptr, nullptr)); 7234d6c458bSopenharmony_ci NAPI_CALL(env, napi_set_named_property(env, exports, "obj", obj)); 7244d6c458bSopenharmony_ci 7254d6c458bSopenharmony_ci return exports; 7264d6c458bSopenharmony_ci } 7274d6c458bSopenharmony_ci 7284d6c458bSopenharmony_ci static napi_module processModule = { 7294d6c458bSopenharmony_ci .nm_version = 1, 7304d6c458bSopenharmony_ci .nm_flags = 0, 7314d6c458bSopenharmony_ci .nm_filename = nullptr, 7324d6c458bSopenharmony_ci .nm_register_func = Init, 7334d6c458bSopenharmony_ci .nm_modname = "process", 7344d6c458bSopenharmony_ci .nm_priv = reinterpret_cast<void*>(0), 7354d6c458bSopenharmony_ci .reserved = { 0 }, 7364d6c458bSopenharmony_ci }; 7374d6c458bSopenharmony_ci 7384d6c458bSopenharmony_ci extern "C" __attribute__ ((constructor)) void ProcessRegisterModule() 7394d6c458bSopenharmony_ci { 7404d6c458bSopenharmony_ci napi_module_register(&processModule); 7414d6c458bSopenharmony_ci } 7424d6c458bSopenharmony_ci} // namespace OHOS::JsSysModule::Process 743