Skip to main content

ProcessHandle

Struct ProcessHandle 

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

Handle to an in-flight streaming run. Caller stores it (e.g. in a runId-keyed map) so a later cancel() can find it.

Dropping the handle does NOT cancel the run — the reader threads + wait thread continue independently. Use cancel() explicitly when the user closes the connection.

Implementations§

Source§

impl ProcessHandle

Source

pub fn cancel(&self) -> Result<(), StreamError>

SIGTERM the process, then SIGKILL after 1.5s if it’s still alive. The CLI is supposed to flush a final result on SIGTERM but we don’t trust it to do so forever.

§Platform behaviour

This ends the process it spawned, not that process’s descendants. On unix the distinction rarely bites: signalling a shell that execed its payload reaches the payload, because they are the same process. On Windows cancelling is TerminateProcess, which has no notion of a process tree — so a child that spawned its own children leaves them running, and because they inherited the stdout handle, the stream stays open and no Event::Exited arrives. Killing a tree there needs a Job Object, which this does not yet create.

Source

pub fn write_line(&self, line: &str) -> Result<(), StreamError>

Send one line to the child’s stdin, newline-terminated and flushed.

There is only one stream a caller can write to, so the name does not repeat it — Stdin::Piped on the command is where that was said.

Err when the child was spawned with Stdin::Closed (the default), or when it has exited and the pipe is gone — both of which a caller expecting an answer needs to hear about rather than block on.

Source

pub fn write(&self, bytes: &[u8]) -> Result<(), StreamError>

Send raw bytes to the child’s stdin, flushed.

write_line covers newline-delimited protocols, which most CLIs and MCP’s stdio transport use. This is for the ones that frame differently — LSP counts bytes in a Content-Length header, and a stray newline there is a protocol error.

Source

pub fn was_cancelled(&self) -> bool

Whether cancel() was called. Tagged on the final Exited event.

Source

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

The child’s OS process id while it’s alive, or None once it has been reaped (the Child is taken on exit). Lets an embedder record the pid so a child orphaned by a hard crash can be killed on the next launch.

Trait Implementations§

Source§

impl Clone for ProcessHandle

Source§

fn clone(&self) -> ProcessHandle

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for ProcessHandle

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. 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> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. 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> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
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.