pub struct SpawnOptionsBuilder { /* private fields */ }Expand description
Builder for SpawnOptions.
Implementations§
Source§impl SpawnOptionsBuilder
impl SpawnOptionsBuilder
Sourcepub fn new(argv: Vec<String>, backend: SpawnBackend) -> Self
pub fn new(argv: Vec<String>, backend: SpawnBackend) -> Self
Create a new builder with the specified argument vector.
Sourcepub fn stdin(self, data: impl Into<Box<[u8]>>) -> Self
pub fn stdin(self, data: impl Into<Box<[u8]>>) -> Self
Provide data to be written to the child’s stdin.
Sourcepub fn capture_stdout(self) -> Self
pub fn capture_stdout(self) -> Self
Enable stdout capture.
Examples found in repository?
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}Sourcepub fn capture_stderr(self) -> Self
pub fn capture_stderr(self) -> Self
Enable stderr capture.
Sourcepub fn wait(self, wait: bool) -> Self
pub fn wait(self, wait: bool) -> Self
Set whether to wait for the process to terminate (default: true).
Sourcepub fn pgroup(self, pgroup: ProcessGroup) -> Self
pub fn pgroup(self, pgroup: ProcessGroup) -> Self
Set process group and isolation policy.
Sourcepub fn session_containment(self) -> Self
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.
Sourcepub fn max_output(self, max: usize) -> Self
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.
Sourcepub fn timeout_ms(self, ms: u32) -> Self
pub fn timeout_ms(self, ms: u32) -> Self
Set the execution timeout in milliseconds.
Examples found in repository?
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}Sourcepub fn kill_grace_ms(self, ms: u32) -> Self
pub fn kill_grace_ms(self, ms: u32) -> Self
Set the grace period before SIGKILL (default: 2s).
Sourcepub fn cancel(self, policy: CancelPolicy) -> Self
pub fn cancel(self, policy: CancelPolicy) -> Self
Set the cancellation policy (default: Kill).
Sourcepub fn fd_policy(self, policy: SpawnFdPolicy) -> Self
pub fn fd_policy(self, policy: SpawnFdPolicy) -> Self
Set the child file-descriptor inheritance policy.
Sourcepub fn early_exit(self, callback: fn(&[u8]) -> bool) -> Self
pub fn early_exit(self, callback: fn(&[u8]) -> bool) -> Self
Set an early exit callback.
Sourcepub fn chunk_sink<F>(self, sink: F) -> Self
pub fn chunk_sink<F>(self, sink: F) -> Self
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.
Sourcepub fn pty(self) -> Self
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).
Sourcepub fn build(self) -> Result<SpawnOptions, CoreError>
pub fn build(self) -> Result<SpawnOptions, CoreError>
Build the spawn options.
Examples found in repository?
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
impl Clone for SpawnOptionsBuilder
Source§fn clone(&self) -> SpawnOptionsBuilder
fn clone(&self) -> SpawnOptionsBuilder
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more