use std::io;
use std::time::Duration;
use tokio::process::{Child, Command};
use crate::Mechanism;
use crate::stats::ProcessGroupStats;
#[derive(Debug, Clone, Copy, Default)]
pub(crate) struct ProcMetrics {
pub cpu_time: Option<Duration>,
pub peak_memory_bytes: Option<u64>,
}
pub(crate) fn process_metrics(pid: u32) -> ProcMetrics {
imp::process_metrics(pid)
}
#[cfg(unix)]
pub(crate) mod pgroup;
#[cfg_attr(windows, path = "windows.rs")]
#[cfg_attr(target_os = "linux", path = "linux.rs")]
#[cfg_attr(all(unix, not(target_os = "linux")), path = "unix.rs")]
#[cfg_attr(not(any(windows, unix)), path = "other.rs")]
mod imp;
pub(crate) struct Job(imp::Job);
impl Job {
pub(crate) fn new() -> io::Result<Self> {
imp::Job::new().map(Job)
}
pub(crate) fn spawn(&self, cmd: &mut Command) -> io::Result<Child> {
self.0.spawn(cmd)
}
pub(crate) fn adopt(&self, child: &Child) -> io::Result<()> {
self.0.adopt(child)
}
pub(crate) fn kill_all(&self) -> io::Result<()> {
self.0.kill_all()
}
pub(crate) async fn graceful_shutdown(
&self,
timeout: Duration,
escalate: bool,
) -> io::Result<()> {
self.0.graceful_shutdown(timeout, escalate).await
}
pub(crate) fn stats(&self) -> io::Result<ProcessGroupStats> {
self.0.stats()
}
pub(crate) fn mechanism(&self) -> Mechanism {
self.0.mechanism()
}
}