pub use crate::{
PlatformChild, PlatformEmergencySignal, PlatformLifecycle, PlatformOutput, PlatformStdin,
SpawnSpec, StreamMode,
};
pub use crate::platform_imp::{
cancel_capture_reader, canonical_environment_pairs, capture_reader_done, compat_shell_command,
configure_native_command, configure_sync_contained_command, configure_sync_daemon_command,
configure_trampoline_command, enable_descendant_subreaper, exit_code, monitor_console_windows,
parent_has_console, prepare_capture_reader, process_snapshot, process_snapshot_for_pid,
set_process_name, shell_command, soft_terminate_process_group, spawn_sync, spawn_sync_daemon,
sync_child_native_handle, trampoline_exit_code, unix_mark_extra_fds_close_on_exec,
CaptureCancellation,
};
#[derive(Clone, Copy)]
pub enum CaptureStream {
Stdout,
Stderr,
}
#[derive(Debug, Clone)]
pub struct ConsoleWindowInfo {
pub pid: u32,
pub title: String,
pub hwnd: u64,
}
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub struct ProcessSnapshot {
pub pid: u32,
pub parent_pid: u32,
pub start_time_a: u64,
pub start_time_b: u64,
}
#[derive(Clone, Debug, Eq, PartialEq)]
pub enum SyncEnvironment {
Inherit,
Explicit(Vec<(std::ffi::OsString, std::ffi::OsString)>),
}
pub struct SpawnStdio<'a> {
pub stdin: StdioSource<'a>,
pub stdout: StdioSource<'a>,
pub stderr: StdioSource<'a>,
pub drain_timeout: Option<std::time::Duration>,
pub show_console: bool,
}
impl Default for SpawnStdio<'_> {
fn default() -> Self {
Self {
stdin: StdioSource::Null,
stdout: StdioSource::Parent,
stderr: StdioSource::Parent,
drain_timeout: Some(std::time::Duration::from_secs(2)),
show_console: false,
}
}
}
pub struct DaemonStdio<'a> {
pub stdout: DaemonStdioSource<'a>,
pub stderr: DaemonStdioSource<'a>,
}
impl Default for DaemonStdio<'_> {
fn default() -> Self {
Self {
stdout: DaemonStdioSource::Null,
stderr: DaemonStdioSource::Null,
}
}
}
pub enum DaemonStdioSource<'a> {
Null,
File(&'a std::fs::File),
}
pub enum StdioSource<'a> {
Null,
Parent,
File(&'a std::fs::File),
Pipe,
}
pub struct DaemonChild {
pub(crate) pid: u32,
pub(crate) inner: Box<dyn DaemonChildControl>,
}
pub(crate) trait DaemonChildControl:
Send + Sync + std::panic::UnwindSafe + std::panic::RefUnwindSafe
{
fn kill(&mut self) -> std::io::Result<()>;
fn wait(&mut self) -> std::io::Result<i32>;
fn try_wait(&mut self) -> std::io::Result<Option<i32>>;
}
impl DaemonChild {
pub fn id(&self) -> u32 {
self.pid
}
pub fn kill(&mut self) -> std::io::Result<()> {
self.inner.kill()
}
pub fn wait(&mut self) -> std::io::Result<i32> {
self.inner.wait()
}
pub fn try_wait(&mut self) -> std::io::Result<Option<i32>> {
self.inner.try_wait()
}
}
pub struct SpawnedChild {
pub stdin: Option<std::process::ChildStdin>,
pub stdout: Option<std::process::ChildStdout>,
pub stderr: Option<std::process::ChildStderr>,
pub(crate) pid: u32,
pub(crate) inner: Box<dyn SpawnedChildControl>,
}
pub(crate) trait SpawnedChildControl:
Send + Sync + std::panic::UnwindSafe + std::panic::RefUnwindSafe
{
fn kill(&mut self) -> std::io::Result<()>;
fn wait(&mut self) -> std::io::Result<i32>;
fn try_wait(&mut self) -> std::io::Result<Option<i32>>;
fn shutdown(&mut self);
}
impl SpawnedChild {
pub fn id(&self) -> u32 {
self.pid
}
pub fn kill(&mut self) -> std::io::Result<()> {
self.inner.kill()
}
pub fn wait(&mut self) -> std::io::Result<i32> {
self.inner.wait()
}
pub fn try_wait(&mut self) -> std::io::Result<Option<i32>> {
self.inner.try_wait()
}
}
impl Drop for SpawnedChild {
fn drop(&mut self) {
self.inner.shutdown();
}
}
#[derive(Clone, Copy)]
pub enum ObserverScope {
SystemWide,
LaunchedProcessTree,
}
#[derive(Clone, Copy)]
pub enum ObserverCategory {
File,
Network,
Process,
}
#[derive(Clone, Copy)]
pub enum ObserverSupport {
Supported,
Partial,
Unavailable,
}
#[derive(Clone, Copy)]
pub struct ObserverBackend {
pub support: ObserverSupport,
pub backend: &'static str,
pub reason: &'static str,
}
pub use crate::platform_imp::observer_backend;
pub use crate::platform_imp::read_process_cmdline;
pub use crate::platform_imp::read_process_file_handles;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum UnixSignalKind {
Interrupt,
Terminate,
Kill,
}
pub use crate::platform_imp::{
unix_set_priority, unix_signal_process, unix_signal_process_group, unix_signal_raw,
};
pub use crate::platform_imp::kill_tree;