Skip to main content

ExecChild

Struct ExecChild 

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

A running guest process. Hold this until you call wait or drop it; dropping closes the agent connection, which kills the child via the agent’s SIGHUP propagation.

Implementations§

Source§

impl ExecChild

Source

pub fn stdin(&mut self) -> Option<ExecStdin>

Take ownership of the stdin handle. Calling this twice returns None the second time.

Source

pub fn stdout(&mut self) -> Option<ExecStdout>

Take ownership of stdout. Returns a Reader. Useful when you want to spawn your own pump thread.

Source

pub fn stderr(&mut self) -> Option<ExecStderr>

Take ownership of stderr. Empty in tty mode.

Source

pub fn signal(&self, signum: i32) -> Result<()>

Send a signal (SIGTERM/SIGINT/…) to the guest process.

Source

pub fn signaler(&self) -> ExecSignaler

Hand back a Send + Sync + Clone handle for signaling THIS child from another thread. The returned handle can outlive the ExecChild — after the child exits, calls on the signaler become no-ops on the closed socket (no panic, no deadlock).

Typical use: register the signaler in a cancellation registry, move the child into a wait thread, fire the registry slot (e.g. on user-cancel or pool-shutdown) to interrupt.

Cost: one atomic refcount increment.

Source

pub fn abort(&self) -> Result<()>

Close the host-side socket (shutdown(Both)) WITHOUT waiting for a clean exit. The demux thread observes EOF and exits; a concurrent wait / output returns Err(UnexpectedEof). Use this when you’ve already decided the child should stop right now — e.g. a pool shutdown killed the worker and the in-flight wait would otherwise hang.

Equivalent to self.signaler().abort(). Provided here for the common case where you have the child handle directly.

Source

pub fn try_wait(&self) -> Result<Option<(ExitStatus, Option<u64>)>>

Non-consuming poll. Returns Ok(Some(_)) if the child has exited (and reaps the exit status), Ok(None) if it’s still running, Err(_) on demux failure. Mirrors std::process::Child::try_wait — useful when you want to register the signaler with a registry AND periodically check completion without committing to a blocking wait.

Source

pub fn resize(&self, cols: u16, rows: u16) -> Result<()>

Resize the pty (tty mode only). No-op in pipe mode (the agent ignores RESIZE frames if no pty is attached).

Source

pub fn wait(self) -> Result<ExitStatus>

Block until the guest process exits. Returns the exit status (or a synthesized one if the agent disconnected).

Source

pub fn wait_with_rss(self) -> Result<(ExitStatus, Option<u64>)>

Like ExecChild::wait but also surfaces the peak RSS the agent reports (Some(kib) for v0.2.x+ agents, None for older ones). Used internally by ExecBuilder::output to populate ExecOutcome::peak_rss_kib.

Trait Implementations§

Source§

impl Drop for ExecChild

Source§

fn drop(&mut self)

Executes the destructor for this type. Read more
Source§

fn pin_drop(self: Pin<&mut Self>)

🔬This is a nightly-only experimental API. (pin_ergonomics)
Execute the destructor for this type, but different to Drop::drop, it requires self to be pinned. 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> 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<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