Skip to main content

Process

Struct Process 

Source
pub struct Process<'a> { /* private fields */ }
Expand description

A live sandboxed process with caller-owned stdio streams, returned by Sandbox::popen.

take_stdin / take_stdout / take_stderr move out the pipe end of each stream opened with StdioMode::Piped (each available once); the caller reads/writes those while the process runs. Unlike std::process::Child, this borrows the originating Sandbox rather than owning the process: the process is killed and reaped when that Sandbox is dropped, or eagerly via Process::kill.

A Process that is dropped without Process::wait leaves the child running until the Sandbox is dropped — call wait (or kill) to end it.

Implementations§

Source§

impl Process<'_>

Source

pub fn take_stdin(&mut self) -> Option<OwnedFd>

Take the write end of a Piped stdin. The caller writes the child’s input; closing this fd signals EOF. None if stdin was not piped or was already taken.

Deadlock warning (as with std::process::Child): if you take stdin you own it — drop/close it before Process::wait, or a child that reads to EOF (e.g. cat) never exits and wait blocks forever. (An untaken piped stdin is closed by wait for you.)

Source

pub fn take_stdout(&mut self) -> Option<OwnedFd>

Take the read end of a Piped stdout. None if stdout was not piped or was already taken.

Source

pub fn take_stderr(&mut self) -> Option<OwnedFd>

Take the read end of a Piped stderr. None if stderr was not piped or was already taken.

Source

pub fn pid(&self) -> Option<i32>

The child PID, or None if not spawned. Remains Some after the child exits (until the Sandbox is dropped).

Source

pub fn kill(&mut self) -> Result<(), SandlockError>

Send SIGKILL to the child’s entire process group (every process the workload spawned, not just the top-level child). Idempotent — a process that already exited is not an error.

Source

pub async fn wait(self) -> Result<RunResult, SandlockError>

Wait for the child to exit. Any Piped stdout/stderr the caller did not take is drained into the returned RunResult; taken streams are None because the caller owns them. An untaken piped stdin is closed here so the child sees EOF; a taken stdin the caller must close itself first (see Process::take_stdin) or this blocks forever.

Auto Trait Implementations§

§

impl<'a> !RefUnwindSafe for Process<'a>

§

impl<'a> !Sync for Process<'a>

§

impl<'a> !UnwindSafe for Process<'a>

§

impl<'a> Freeze for Process<'a>

§

impl<'a> Send for Process<'a>

§

impl<'a> Unpin for Process<'a>

§

impl<'a> UnsafeUnpin for Process<'a>

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<'a, T, E> AsTaggedExplicit<'a, E> for T
where T: 'a,

Source§

fn explicit(self, class: Class, tag: u32) -> TaggedParser<'a, Explicit, Self, E>

Source§

impl<'a, T, E> AsTaggedImplicit<'a, E> for T
where T: 'a,

Source§

fn implicit( self, class: Class, constructed: bool, tag: u32, ) -> TaggedParser<'a, Implicit, Self, E>

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> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more