nixを使います。
nix = “0.16.1”
use nix::unistd::{getpid};
fn main() {
println!("My id is {}", getpid());
}
My id is 577891
### 子プロセスの生成
use nix::unistd::{fork, getpid, getppid, ForkResult};
use nix::sys::wait::waitpid;
use std::process::exit;
fn main() {
let num_children = 2;
start_parent(num_children);
}
fn start_parent(num_children: u32) {
println!("Parent: I am the parent process");
println!("Parent PID is {}", getpid());
for i in 0..num_children {
run_child();
}
}
fn run_child() {
let child_pid = match fork() {
Ok(ForkResult::Parent {child, ..}) => {
println!("Main({}) forked child ({})", getpid(), child);
child
},
Ok(ForkResult::Child) => {
println!("Child({}) PPID is ({})", getpid(), getppid());
exit(0);
},
Err(_) => panic!("fork failed"),
};
match waitpid(child_pid, None) {
Ok(status) => println!(""),
Err(_) => println!("waitpid() failed"),
}
}
Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.20s
Running `target/debug/parallel`
Parent: I am the parent process
Parent PID is 579363
Main(579363) forked child (579390)
Child(579390) PPID is (579363)
Main(579363) forked child (579391)
Child(579391) PPID is (579363)
おおおおおおおおお、中々素晴らしい!