Skip to main content

Child

Struct Child 

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

A wrapper around smol::process::Child that ensures all subprocesses are killed when the process is terminated by using process groups.

Implementations§

Source§

impl Child

Source

pub fn spawn( command: Command, stdin: Stdio, stdout: Stdio, stderr: Stdio, ) -> Result<Self>

Source

pub fn into_inner(self) -> Child

Source

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

Methods from Deref<Target = Child>§

Source

pub fn id(&self) -> u32

Returns the OS-assigned process identifier associated with this child.

§Examples
use async_process::Command;

let mut child = Command::new("ls").spawn()?;
println!("id: {}", child.id());
Source

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

Forces the child process to exit.

If the child has already exited, an InvalidInput error is returned.

This is equivalent to sending a SIGKILL on Unix platforms.

§Examples
use async_process::Command;

let mut child = Command::new("yes").spawn()?;
child.kill()?;
println!("exit status: {}", child.status().await?);
Source

pub fn try_status(&mut self) -> Result<Option<ExitStatus>, Error>

Returns the exit status if the process has exited.

Unlike status(), this method will not drop the stdin handle.

§Examples
use async_process::Command;

let mut child = Command::new("ls").spawn()?;

match child.try_status()? {
    None => println!("still running"),
    Some(status) => println!("exited with: {}", status),
}
Source

pub fn status(&mut self) -> impl Future<Output = Result<ExitStatus, Error>>

Drops the stdin handle and waits for the process to exit.

Closing the stdin of the process helps avoid deadlocks. It ensures that the process does not block waiting for input from the parent process while the parent waits for the child to exit.

§Examples
use async_process::{Command, Stdio};

let mut child = Command::new("cp")
    .arg("a.txt")
    .arg("b.txt")
    .spawn()?;

println!("exit status: {}", child.status().await?);

Trait Implementations§

Source§

impl Deref for Child

Source§

type Target = Child

The resulting type after dereferencing.
Source§

fn deref(&self) -> &Self::Target

Dereferences the value.
Source§

impl DerefMut for Child

Source§

fn deref_mut(&mut self) -> &mut Self::Target

Mutably dereferences the value.

Auto Trait Implementations§

§

impl Freeze for Child

§

impl RefUnwindSafe for Child

§

impl Send for Child

§

impl Sync for Child

§

impl Unpin for Child

§

impl UnsafeUnpin for Child

§

impl UnwindSafe for Child

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, 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> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<P, T> Receiver for P
where P: Deref<Target = T> + ?Sized, T: ?Sized,

Source§

type Target = T

🔬This is a nightly-only experimental API. (arbitrary_self_types)
The target type on which the method may be called.
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
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.