pub struct JoinHandle<T> { /* private fields */ }
Expand description
An owned permission to join on a process (block on its termination).
The join handle can be used to join a process but also provides the ability to kill it.
Implementations§
Source§impl<T> JoinHandle<T>
impl<T> JoinHandle<T>
Sourcepub fn pid(&self) -> Option<u32>
pub fn pid(&self) -> Option<u32>
Returns the process ID if available.
The process ID is unavailable when pooled calls are not scheduled to processes.
Sourcepub fn kill(&mut self) -> Result<(), SpawnError>
pub fn kill(&mut self) -> Result<(), SpawnError>
Kill the child process.
If the join handle was created from a pool this call will do one of two things depending on the situation:
- if the call was already picked up by the process, the process will be killed.
- if the call was not yet scheduled to a process it will be cancelled.
Sourcepub fn stdin(&mut self) -> Option<&mut ChildStdin>
pub fn stdin(&mut self) -> Option<&mut ChildStdin>
Fetch the stdin
handle if it has been captured
Sourcepub fn stdout(&mut self) -> Option<&mut ChildStdout>
pub fn stdout(&mut self) -> Option<&mut ChildStdout>
Fetch the stdout
handle if it has been captured
Examples found in repository?
4fn main() {
5 procspawn::init();
6
7 let mut builder = procspawn::Builder::new();
8 builder.stdout(Stdio::piped());
9
10 let mut handle = builder.spawn((1, 2), |(a, b)| {
11 println!("{:?} {:?}", a, b);
12 });
13
14 let mut s = String::new();
15 handle.stdout().unwrap().read_to_string(&mut s).unwrap();
16 assert_eq!(s, "1 2\n");
17}
Sourcepub fn stderr(&mut self) -> Option<&mut ChildStderr>
pub fn stderr(&mut self) -> Option<&mut ChildStderr>
Fetch the stderr
handle if it has been captured
Source§impl<T: Serialize + DeserializeOwned> JoinHandle<T>
impl<T: Serialize + DeserializeOwned> JoinHandle<T>
Sourcepub fn join(self) -> Result<T, SpawnError>
pub fn join(self) -> Result<T, SpawnError>
Wait for the child process to return a result.
If the join handle was created from a pool the join is virtualized.
Examples found in repository?
More examples
3fn main() {
4 procspawn::init();
5
6 let a = 42u32;
7 let b = 23u32;
8 let c = 1;
9 let handle = spawn!((a => new_name1, b, mut c) || -> Result<_, ()> {
10 c += 1;
11 Ok(new_name1 + b + c)
12 });
13 let value = handle.join().unwrap();
14
15 println!("{:?}", value);
16}
71fn main() {
72 procspawn::init();
73
74 let bytes = MyBytes::open("Cargo.toml").unwrap();
75
76 let bytes_two = procspawn::spawn!((bytes.clone() => bytes) || {
77 println!("length: {}", bytes.bytes.len());
78 bytes
79 })
80 .join()
81 .unwrap();
82
83 assert_eq!(bytes, bytes_two);
84}
3fn main() {
4 procspawn::init();
5
6 let handle = spawn((), |()| {
7 panic!("Whatever!");
8 });
9
10 match handle.join() {
11 Ok(()) => unreachable!(),
12 Err(err) => {
13 let panic = err.panic_info().expect("got a non panic error");
14 println!("process panicked with {}", panic.message());
15 println!("{:#?}", panic);
16 }
17 }
18}
Sourcepub fn join_timeout(&mut self, timeout: Duration) -> Result<T, SpawnError>
pub fn join_timeout(&mut self, timeout: Duration) -> Result<T, SpawnError>
Like join
but with a timeout.
Can be called multiple times. If anything other than a timeout error is returned, the
handle becomes unusuable, and subsequent calls to either join
or join_timeout
will
return an error.