libnick 2025.3.0
A cross-platform base for native Nickvision applications.
Loading...
Searching...
No Matches
process.h
Go to the documentation of this file.
1
22
23#ifndef PROCESS_H
24#define PROCESS_H
25
26#include <cstdio>
27#include <filesystem>
28#include <memory>
29#include <mutex>
30#include <string>
31#include <thread>
32#include <vector>
33#include "events/event.h"
35#ifdef _WIN32
36#include <windows.h>
37#else
38#include <sys/types.h>
39#endif
40
41namespace Nickvision::System
42{
46 class Process
47 {
48 public:
56 Process(const std::filesystem::path& path, const std::vector<std::string>& args = {}, const std::filesystem::path& workingDir = {});
66 const std::filesystem::path& getPath() const;
76 bool isRunning() const;
81 bool hasCompleted() const;
86 int getExitCode() const;
91 const std::string& getOutput() const;
96 bool start();
101 bool kill();
109
110 private:
114 void watch();
115 mutable std::mutex m_mutex;
116 std::filesystem::path m_path;
117 std::vector<std::string> m_args;
118 std::filesystem::path m_workingDirectory;
120 bool m_running;
121 bool m_completed;
122 int m_exitCode;
123 std::string m_output;
124 std::thread m_watchThread;
125#ifdef _WIN32
126 HANDLE m_read;
127 HANDLE m_write;
128 PROCESS_INFORMATION m_pi;
129 HANDLE m_job;
130#else
131 int m_pipe[2];
132 pid_t m_pid;
133#endif
134 };
135}
136
137#endif //PROCESS_H
An event that can have handlers subscribe to it, which in turn will be called when the event is invok...
Definition event.h:49
bool isRunning() const
Gets whether or not the process is running.
~Process()
Destructs a Process.
bool start()
Starts the process.
int getExitCode() const
Gets the exit code of the process.
Process(const std::filesystem::path &path, const std::vector< std::string > &args={}, const std::filesystem::path &workingDir={})
Constructs a Process.
bool kill()
Kills the process.
const std::string & getOutput() const
Gets the console output of the process.
Events::Event< ProcessExitedEventArgs > & exited()
Gets the event for when the process has exited.
int waitForExit()
Waits for the process to exit.
const std::filesystem::path & getPath() const
Gets the path of the process.
bool hasCompleted() const
Gets whether or not the process has completed.
Definition deploymentmode.h:27