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