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