use std::io;
use std::time::Duration;
use tokio::process::{Child, Command};
use crate::Mechanism;
use crate::stats::ProcessGroupStats;
use crate::sys::ProcMetrics;
use crate::sys::pgroup::ProcessGroup;
pub(crate) struct Job {
group: ProcessGroup,
}
impl Job {
pub(crate) fn new() -> io::Result<Self> {
Ok(Job {
group: ProcessGroup::new(),
})
}
pub(crate) fn spawn(&self, cmd: &mut Command) -> io::Result<Child> {
self.group.spawn(cmd)
}
pub(crate) fn adopt(&self, child: &Child) -> io::Result<()> {
self.group.adopt(child)
}
pub(crate) fn kill_all(&self) -> io::Result<()> {
self.group.kill_all()
}
pub(crate) async fn graceful_shutdown(
&self,
timeout: Duration,
escalate: bool,
) -> io::Result<()> {
self.group.graceful_shutdown(timeout, escalate).await
}
pub(crate) fn stats(&self) -> io::Result<ProcessGroupStats> {
self.group.stats()
}
pub(crate) fn mechanism(&self) -> Mechanism {
Mechanism::ProcessGroup
}
}
pub(crate) fn process_metrics(_pid: u32) -> ProcMetrics {
ProcMetrics::default()
}