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)
おおおおおおおおお、中々素晴らしい!