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