MSTL 1.4.0
A Modern C++ Library with extended functionality, web components, and utility libraries
载入中...
搜索中...
未找到
process.hpp
1#ifndef MSTL_CORE_SYSTEM_PROCESS_HPP__
2#define MSTL_CORE_SYSTEM_PROCESS_HPP__
3#include "../string/string.hpp"
4#include "../container/vector.hpp"
5#ifdef MSTL_PLATFORM_LINUX__
6#include <fcntl.h>
7#endif
8#ifdef MSTL_PLATFORM_WINDOWS__
9#include <Windows.h>
10#include "../config/undef_cmacro.hpp"
11#endif
13
14struct process_times {
15 uint64_t user_time_ms;
16 uint64_t kernel_time_ms;
17 uint64_t wall_time_ms;
18};
19
20struct process_memory_info {
21 size_t working_set_size;
22 size_t peak_working_set_size;
23 size_t pagefile_usage;
24 size_t peak_pagefile_usage;
25};
26
27enum class process_state {
28 running, // 进程正在运行
29 suspended, // 进程被挂起
30 stopped, // 进程被停止
31 exited, // 进程已退出
32 unknown // 未知状态
33};
34
35enum class process_permission {
36 read = 0x01,
37 write = 0x02,
38 execute = 0x04,
39 terminate = 0x08,
40 query_info = 0x10,
41 all = 0xFF
42};
43
44
45class MSTL_API process {
46public:
47#ifdef MSTL_PLATFORM_WINDOWS__
48 using process_id_t = ::DWORD;
49#else
50 using process_id_t = ::pid_t;
51#endif
52
53 struct process_info {
54 process_id_t process_id;
55#ifdef MSTL_PLATFORM_WINDOWS__
56 ::PROCESS_INFORMATION pi;
57 ::HANDLE hStdoutRead;
58 ::HANDLE hStdoutWrite;
59#else
60 int stdout_fd[2]; // [0] read,[1] write
61#endif
62 bool is_running;
63 string stdout_output;
64 };
65
66
67 static process_info create_process(
68 const string& executable,
69 const vector<string>& args = {},
70 bool capture_output = false);
71
72 static int wait_for_process(process_info& info, int timeout_ms = -1);
73
74 static bool terminate_process(const process_info& info) noexcept;
75 static bool suspend_process(const process_info& info) noexcept;
76 static bool resume_process(const process_info& info) noexcept;
77
78 static bool is_process_running(const process_info& info) noexcept;
79
80 static process_id_t current_process_id() noexcept;
81
82 static process_memory_info get_process_memory_info(const process_info& info) noexcept;
83 static process_state get_process_state(const process_info& info) noexcept;
84
85 static bool check_process_permission(
86 const process_info& info,
87 process_permission permission) noexcept;
88
89 static string get_process_name(process_id_t process_id) noexcept;
90
91 static vector<process_info> find_processes_by_name(const string& name);
92 static vector<process_info> get_child_processes(const process_info& parent_info);
93};
94
95class MSTL_API process_group {
96public:
97 process_group() = default;
98 ~process_group() = default;
99
100 void add_process(process::process_info info);
101 bool terminate_all();
102 bool wait_all(int timeout_ms = -1);
103
104private:
105 vector<process::process_info> processes;
106};
107
109#endif // MSTL_CORE_SYSTEM_PROCESS_HPP__
unsigned long long uint64_t
64位无符号整数类型
#define MSTL_END_NAMESPACE__
结束全局命名空间MSTL
#define MSTL_BEGIN_NAMESPACE__
开始全局命名空间MSTL
MSTL_NORETURN void MSTL_API terminate()
调用当前终止处理函数