Struct async_process::Child

source ·
pub struct Child {
    pub stdin: Option<ChildStdin>,
    pub stdout: Option<ChildStdout>,
    pub stderr: Option<ChildStderr>,
    /* private fields */
}
Expand description

A spawned child process.

The process can be in running or exited state. Use status() or output() to wait for it to exit.

If the Child is dropped, the process keeps running in the background.

Examples

Spawn a process and wait for it to complete:

use async_process::Command;

Command::new("cp").arg("a.txt").arg("b.txt").status().await?;

Fields§

§stdin: Option<ChildStdin>

The handle for writing to the child’s standard input (stdin), if it has been captured.

§stdout: Option<ChildStdout>

The handle for reading from the child’s standard output (stdout), if it has been captured.

§stderr: Option<ChildStderr>

The handle for reading from the child’s standard error (stderr), if it has been captured.

Implementations§

source§

impl 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<()>

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

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

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?);
source

pub fn output(self) -> impl Future<Output = Result<Output>>

Drops the stdin handle and collects the output of the process.

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.

In order to capture the output of the process, Command::stdout() and Command::stderr() must be configured with Stdio::piped().

Examples
use async_process::{Command, Stdio};

let child = Command::new("ls")
    .stdout(Stdio::piped())
    .stderr(Stdio::piped())
    .spawn()?;

let out = child.output().await?;

Trait Implementations§

source§

impl AsRawHandle for Child

source§

fn as_raw_handle(&self) -> RawHandle

Extracts the raw handle. Read more
source§

impl Debug for Child

source§

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

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl !RefUnwindSafe for Child

§

impl Send for Child

§

impl Sync for Child

§

impl Unpin 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, U> TryFrom<U> for T
where U: Into<T>,

§

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

§

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.