From 4ff865f9eb3ef54871fb61b1fcab2d8c31fe3d86 Mon Sep 17 00:00:00 2001 From: Alex Kotov Date: Sun, 5 Dec 2021 21:09:52 +0500 Subject: [PATCH] Run composite manager --- src/main.rs | 18 ++++++++++++++++++ src/task.rs | 10 ++++++++++ 2 files changed, 28 insertions(+) diff --git a/src/main.rs b/src/main.rs index b07b98e..ee0e9fb 100644 --- a/src/main.rs +++ b/src/main.rs @@ -4,13 +4,21 @@ use crate::task::*; fn main() { let wm_task = WMTask::start(TaskConfig::new("polytreewm")).unwrap(); + let comp_task = CompTask::start(TaskConfig::new("picom")).unwrap(); + let wm_task_result = wm_task.wait(); + + comp_task.terminate(); + unsafe { libc::exit(wm_task_result.status()) } } #[derive(Debug)] struct WMTask(TaskInfo); +#[derive(Debug)] +struct CompTask(TaskInfo); + impl Task for WMTask { fn new(info: TaskInfo) -> Self { Self(info) @@ -20,3 +28,13 @@ impl Task for WMTask { &self.0 } } + +impl Task for CompTask { + fn new(info: TaskInfo) -> Self { + Self(info) + } + + fn info(&self) -> &TaskInfo { + &self.0 + } +} diff --git a/src/task.rs b/src/task.rs index e634365..3377740 100644 --- a/src/task.rs +++ b/src/task.rs @@ -89,4 +89,14 @@ pub trait Task: Debug + Sized { TaskResult::new(self.info().clone(), status) } } + + fn terminate(self) -> TaskResult { + unsafe { + libc::kill(self.info().pid(), libc::SIGKILL); + let status: i32 = 0; + libc::waitpid(self.info().pid(), status as *mut i32, 0); + let status = libc::WEXITSTATUS(status); + TaskResult::new(self.info().clone(), status) + } + } }