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__
8#ifdef MSTL_PLATFORM_WINDOWS__
10#include "../config/undef_cmacro.hpp"
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;
27enum class process_state {
35enum class process_permission {
45class MSTL_API process {
47#ifdef MSTL_PLATFORM_WINDOWS__
48 using process_id_t = ::DWORD;
50 using process_id_t = ::pid_t;
54 process_id_t process_id;
55#ifdef MSTL_PLATFORM_WINDOWS__
56 ::PROCESS_INFORMATION pi;
58 ::HANDLE hStdoutWrite;
67 static process_info create_process(
68 const string& executable,
69 const vector<string>& args = {},
70 bool capture_output =
false);
72 static int wait_for_process(process_info& info,
int timeout_ms = -1);
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;
78 static bool is_process_running(
const process_info& info)
noexcept;
80 static process_id_t current_process_id() noexcept;
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;
85 static
bool check_process_permission(
86 const process_info& info,
87 process_permission permission) noexcept;
89 static
string get_process_name(process_id_t process_id) noexcept;
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);
95class MSTL_API process_group {
97 process_group() =
default;
98 ~process_group() =
default;
100 void add_process(process::process_info info);
101 bool terminate_all();
102 bool wait_all(
int timeout_ms = -1);
105 vector<process::process_info> processes;
unsigned long long uint64_t
64位无符号整数类型
#define MSTL_END_NAMESPACE__
结束全局命名空间MSTL
#define MSTL_BEGIN_NAMESPACE__
开始全局命名空间MSTL
MSTL_NORETURN void MSTL_API terminate()
调用当前终止处理函数