1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
//! This crate provides the ability to spawn processes with a function similar
//! to `thread::spawn`.
//!
//! Unlike `thread::spawn` data cannot be passed in closures but must be
//! explicitly passed as single argument which must be [`serde`](https://serde.rs/)
//! serializable. The return value from the spawned closure also must be
//! serializable and can then be unwrapped from the returned join handle.
//!
//! ```rust,no_run
//! procspawn::init();
//!
//! let data = vec![1, 2, 3, 4];
//! let handle = procspawn::spawn(data, |data| {
//! println!("Received data {:?}", &data);
//! data.into_iter().sum::<i64>()
//! });
//! let result = handle.join().unwrap();
//!```
//!
//! Because `procspawn` will invoke a subprocess and there is currently no
//! reliable way to intercept `main` in Rust it's necessary for you to call
//! [`procspawn::init`](fn.init.html) at an early time in the program. The
//! place where this will be called is the entrypoint for the subprocesses
//! spawned.
//!
//! [`spawn`](fn.spawn.html) can pass arbitrary serializable data, including
//! IPC senders and receivers from the [`ipc-channel`](https://crates.io/crates/ipc-channel)
//! crate, down to the new process.
//!
//! ## Differences to Mitosis
//!
//! This crate is a fork of the `mitosis` crate with various differences in
//! how they operate. The most obvious one is that `procspawn` is very
//! opinionated about error handling and will automatically capture and
//! send backtraces across the process boundaries. Additionally `procspawn`
//! provides a process pool.
//!
//! ## Feature Flags
//!
//! The following feature flags exist:
//!
//! * `backtrace`: this feature is enabled by default. When in use then
//! backtraces are captured with the `backtrace-rs` crate and serialized
//! across process boundaries.
//! * `test-support`: when this feature is enabled procspawn can be used
//! with rusttest. See [`enable_test_support!`](macro.enable_test_support.html)
//! for more information.
use ;
pub use ;
pub use ;
pub use ;
pub use ;
/// Spawn a new process to run a function with some payload.