1.0.0[−][src]Module std::process
A module for working with processes.
This module is mostly concerned with spawning and interacting with child
processes, but it also provides abort and exit for terminating the
current process.
Spawning a process
The Command struct is used to configure and spawn processes:
use std::process::Command; let output = Command::new("echo") .arg("Hello world") .output() .expect("Failed to execute command"); assert_eq!(b"Hello world\n", output.stdout.as_slice());Run
Several methods on Command, such as spawn or output, can be used
to spawn a process. In particular, output spawns the child process and
waits until the process terminates, while spawn will return a Child
that represents the spawned child process.
Handling I/O
The stdout, stdin, and stderr of a child process can be
configured by passing an Stdio to the corresponding method on
Command. Once spawned, they can be accessed from the Child. For
example, piping output from one command into another command can be done
like so:
use std::process::{Command, Stdio}; // stdout must be configured with `Stdio::piped` in order to use // `echo_child.stdout` let echo_child = Command::new("echo") .arg("Oh no, a tpyo!") .stdout(Stdio::piped()) .spawn() .expect("Failed to start echo process"); // Note that `echo_child` is moved here, but we won't be needing // `echo_child` anymore let echo_out = echo_child.stdout.expect("Failed to open echo stdout"); let mut sed_child = Command::new("sed") .arg("s/tpyo/typo/") .stdin(Stdio::from(echo_out)) .stdout(Stdio::piped()) .spawn() .expect("Failed to start sed process"); let output = sed_child.wait_with_output().expect("Failed to wait on sed"); assert_eq!(b"Oh no, a typo!\n", output.stdout.as_slice());Run
Note that ChildStderr and ChildStdout implement Read and
ChildStdin implements Write:
use std::process::{Command, Stdio}; use std::io::Write; let mut child = Command::new("/bin/cat") .stdin(Stdio::piped()) .stdout(Stdio::piped()) .spawn() .expect("failed to execute child"); { // limited borrow of stdin let stdin = child.stdin.as_mut().expect("failed to get stdin"); stdin.write_all(b"test").expect("failed to write to stdin"); } let output = child .wait_with_output() .expect("failed to wait on child"); assert_eq!(b"test", output.stdout.as_slice());Run
Structs
| Child | Representation of a running or exited child process. |
| ChildStderr | A handle to a child process's stderr. |
| ChildStdin | A handle to a child process's standard input (stdin). |
| ChildStdout | A handle to a child process's standard output (stdout). |
| Command | A process builder, providing fine-grained control over how a new process should be spawned. |
| ExitStatus | Describes the result of a process after it has terminated. |
| Output | The output of a finished process. |
| Stdio | Describes what to do with a standard I/O stream for a child process when
passed to the |
| ExitCode | Experimental This type represents the status code a process can return to its parent under normal termination. |
Traits
| Termination | Experimental A trait for implementing arbitrary return types in the |
Functions
| abort | Terminates the process in an abnormal fashion. |
| exit | Terminates the current process with the specified exit code. |
| id | Returns the OS-assigned process identifier associated with this process. |