mirror of
https://github.com/robbert-vdh/yabridge.git
synced 2026-05-10 04:30:12 +02:00
Add a detach function to the process handles
This commit is contained in:
@@ -96,18 +96,18 @@ char* const* ProcessEnvironment::make_environ() const {
|
|||||||
Process::Handle::Handle(pid_t pid) : pid_(pid) {}
|
Process::Handle::Handle(pid_t pid) : pid_(pid) {}
|
||||||
|
|
||||||
Process::Handle::~Handle() {
|
Process::Handle::~Handle() {
|
||||||
if (!is_moved_) {
|
if (!detached_) {
|
||||||
// If this function has already been called then that's okay
|
// If this function has already been called then that's okay
|
||||||
terminate();
|
terminate();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Process::Handle::Handle(Handle&& o) noexcept : pid_(o.pid_) {
|
Process::Handle::Handle(Handle&& o) noexcept : pid_(o.pid_) {
|
||||||
o.is_moved_ = true;
|
o.detached_ = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
Process::Handle& Process::Handle::operator=(Handle&& o) noexcept {
|
Process::Handle& Process::Handle::operator=(Handle&& o) noexcept {
|
||||||
o.is_moved_ = true;
|
o.detached_ = true;
|
||||||
|
|
||||||
pid_ = o.pid_;
|
pid_ = o.pid_;
|
||||||
|
|
||||||
@@ -122,6 +122,10 @@ bool Process::Handle::running() const noexcept {
|
|||||||
return pid_running(pid_);
|
return pid_running(pid_);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Process::Handle::detach() noexcept {
|
||||||
|
detached_ = true;
|
||||||
|
}
|
||||||
|
|
||||||
void Process::Handle::terminate() const noexcept {
|
void Process::Handle::terminate() const noexcept {
|
||||||
kill(pid_, SIGINT);
|
kill(pid_, SIGINT);
|
||||||
wait();
|
wait();
|
||||||
|
|||||||
@@ -135,6 +135,11 @@ class Process {
|
|||||||
*/
|
*/
|
||||||
bool running() const noexcept;
|
bool running() const noexcept;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Don't terminate the process when this object gets dropped.
|
||||||
|
*/
|
||||||
|
void detach() noexcept;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Forcefully terminate the process by sending `SIGKILL`. Will reap the
|
* Forcefully terminate the process by sending `SIGKILL`. Will reap the
|
||||||
* process zombie after sending the signal.
|
* process zombie after sending the signal.
|
||||||
@@ -149,9 +154,10 @@ class Process {
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
/**
|
/**
|
||||||
* If `true`, don't terminate the process
|
* If `true`, don't terminate the process when this object gets dropped.
|
||||||
|
* Also set when this object gets moved from.
|
||||||
*/
|
*/
|
||||||
bool is_moved_ = false;
|
bool detached_ = false;
|
||||||
|
|
||||||
pid_t pid_ = 0;
|
pid_t pid_ = 0;
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user