Skip to main content

SpawnOptionsBuilder

Struct SpawnOptionsBuilder 

Source
pub struct SpawnOptionsBuilder { /* private fields */ }
Expand description

Builder for SpawnOptions.

Implementations§

Source§

impl SpawnOptionsBuilder

Source

pub fn new(argv: Vec<String>, backend: SpawnBackend) -> Self

Create a new builder with the specified argument vector.

Source

pub fn env(self, env: Vec<String>) -> Self

Set environment variables.

Source

pub fn cwd(self, cwd: String) -> Self

Set the working directory.

Source

pub fn stdin(self, data: impl Into<Box<[u8]>>) -> Self

Provide data to be written to the child’s stdin.

Source

pub fn capture_stdout(self) -> Self

Enable stdout capture.

Examples found in repository?
examples/spawn_ls.rs (line 10)
3fn main() -> Result<(), Box<dyn std::error::Error>> {
4    println!("Spawning '/bin/ls -l'...");
5
6    let output = SpawnOptions::builder(
7        vec!["/bin/ls".to_string(), "-l".to_string()],
8        SpawnBackend::PosixSpawn,
9    )
10    .capture_stdout()
11    .timeout_ms(5000)
12    .build()?
13    .run()?;
14
15    println!("Exit status: {:?}", output.status);
16    println!("Output length: {} bytes", output.stdout.len());
17    println!("--- STDOUT ---");
18    println!("{}", String::from_utf8_lossy(&output.stdout));
19    println!("--------------");
20
21    Ok(())
22}
Source

pub fn capture_stderr(self) -> Self

Enable stderr capture.

Source

pub fn wait(self, wait: bool) -> Self

Set whether to wait for the process to terminate (default: true).

Source

pub fn pgroup(self, pgroup: ProcessGroup) -> Self

Set process group and isolation policy.

Source

pub fn session_containment(self) -> Self

Contain the child inside the process group/session it is placed into.

A seccomp filter installed in the child (after the daemon’s own setsid/setpgid, before execve) denies setsid, setpgid, setpgrp, unshare, and setns. Because filters are inherited across fork and execve and can only be tightened, never loosened, the child and every descendant are locked into the group/session — making kill_group (timeout/cancel deactivation) total even against a hostile root child that tries to escape by daemonizing or changing its process group. Requires an isolated process group (ProcessGroup::new(None, true)); rejected on SpawnBackend::PosixSpawn, which has no child setup step.

Source

pub fn max_output(self, max: usize) -> Self

Set the combined stdout+stderr output buffer size (default: 1MB).

If captured output exceeds this limit, spawn drains the child pipes to completion and returns EOVERFLOW.

Source

pub fn timeout_ms(self, ms: u32) -> Self

Set the execution timeout in milliseconds.

Examples found in repository?
examples/spawn_ls.rs (line 11)
3fn main() -> Result<(), Box<dyn std::error::Error>> {
4    println!("Spawning '/bin/ls -l'...");
5
6    let output = SpawnOptions::builder(
7        vec!["/bin/ls".to_string(), "-l".to_string()],
8        SpawnBackend::PosixSpawn,
9    )
10    .capture_stdout()
11    .timeout_ms(5000)
12    .build()?
13    .run()?;
14
15    println!("Exit status: {:?}", output.status);
16    println!("Output length: {} bytes", output.stdout.len());
17    println!("--- STDOUT ---");
18    println!("{}", String::from_utf8_lossy(&output.stdout));
19    println!("--------------");
20
21    Ok(())
22}
Source

pub fn kill_grace_ms(self, ms: u32) -> Self

Set the grace period before SIGKILL (default: 2s).

Source

pub fn cancel(self, policy: CancelPolicy) -> Self

Set the cancellation policy (default: Kill).

Source

pub fn fd_policy(self, policy: SpawnFdPolicy) -> Self

Set the child file-descriptor inheritance policy.

Source

pub fn early_exit(self, callback: fn(&[u8]) -> bool) -> Self

Set an early exit callback.

Source

pub fn chunk_sink<F>(self, sink: F) -> Self
where F: Fn(bool, &[u8]) -> SinkResult + Send + Sync + 'static,

Enable streaming drain: forward every retained output chunk to sink as it is read instead of accumulating it for the completion Output.

The sink returns SinkResult::Pause when its bounded queue is full; the drain then stops reading the child (kernel backpressure applies) without dropping the held chunk and without blocking the reactor. Resume via the managed-process or drain resume methods once the queue drains. When a sink is set, max_output no longer truncates: bytes are never dropped on the streaming path.

Source

pub fn pty(self) -> Self

Spawn the child on a pseudo-terminal (see SpawnOptions::pty).

Mutually exclusive with pipe capture: the slave replaces capture_stdout/capture_stderr/stdin as the child’s stdio, and the master replaces the stdout pipe on the drain (single merged stream).

Source

pub fn build(self) -> Result<SpawnOptions, CoreError>

Build the spawn options.

Examples found in repository?
examples/spawn_ls.rs (line 12)
3fn main() -> Result<(), Box<dyn std::error::Error>> {
4    println!("Spawning '/bin/ls -l'...");
5
6    let output = SpawnOptions::builder(
7        vec!["/bin/ls".to_string(), "-l".to_string()],
8        SpawnBackend::PosixSpawn,
9    )
10    .capture_stdout()
11    .timeout_ms(5000)
12    .build()?
13    .run()?;
14
15    println!("Exit status: {:?}", output.status);
16    println!("Output length: {} bytes", output.stdout.len());
17    println!("--- STDOUT ---");
18    println!("{}", String::from_utf8_lossy(&output.stdout));
19    println!("--------------");
20
21    Ok(())
22}

Trait Implementations§

Source§

impl Clone for SpawnOptionsBuilder

Source§

fn clone(&self) -> SpawnOptionsBuilder

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.