Skip to main content

SpawnOptionsBuilder

Struct SpawnOptionsBuilder 

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

Builder for SpawnOptions.

Move-only when SpawnOptionsBuilder::pty_with has been called: the builder then owns a pty pair, so it is not Clone (see 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.

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.

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).

Core creates the pty pair internally. To pre-configure the pty window before the child execs (and derive the child’s terminal env from the read-back), use SpawnOptionsBuilder::pty_with instead — it takes a caller-created pair and is move-only.

Source

pub fn pty_with(self, master: Fd, slave: Fd) -> Self

Spawn the child on a pseudo-terminal using a caller-created pty pair, whose initial window the caller already configured.

The typical flow:

  1. make_pty returns (master, slave);
  2. pty_window applies the initial size to the master and reads back the actual winsize;
  3. the caller derives LINES/COLUMNS from that read-back;
  4. this method hands ownership of the pair to Core.

Core takes ownership of both descriptors and is responsible for their cleanup on every spawn success/failure path. The builder (and the resulting SpawnOptions) is move-only from this point — a pty pair is not Cloneable, so neither is the builder that owns it.

Source

pub fn pdeath_signal(self, sig: i32) -> Self

Arm PR_SET_PDEATHSIG on the spawned child (opt-in).

When set, the child receives sig when the parent thread that created it exits (see SpawnOptions::pdeath_signal for the exact semantics and scope). The child arms the signal before any other setup and aborts if getppid() no longer matches its expected parent — closing the fork→prctl race that would otherwise leave the signal silently undelivered.

Source

pub fn session_exit(self, policy: SessionExitPolicy) -> Self

Set the natural-exit policy for a contained session (see SessionExitPolicy). Defaults to SessionExitPolicy::Sweep.

Source

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

Build the spawn options.

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> 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, 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.