34 lines
694 B
Rust
34 lines
694 B
Rust
#![no_std]
|
|
#![no_main]
|
|
|
|
#[macro_use]
|
|
extern crate user_lib;
|
|
|
|
use user_lib::{exit, fork, wait};
|
|
|
|
const MAX_CHILD: usize = 30;
|
|
|
|
#[unsafe(no_mangle)]
|
|
pub fn main() -> i32 {
|
|
for i in 0..MAX_CHILD {
|
|
let pid = fork();
|
|
if pid == 0 {
|
|
println!("I am child {}", i);
|
|
exit(0);
|
|
} else {
|
|
println!("forked child pid = {}", pid);
|
|
}
|
|
assert!(pid > 0);
|
|
}
|
|
let mut exit_code: i32 = 0;
|
|
for _ in 0..MAX_CHILD {
|
|
if wait(&mut exit_code) <= 0 {
|
|
panic!("wait stopped early");
|
|
}
|
|
}
|
|
if wait(&mut exit_code) > 0 {
|
|
panic!("wait got too many");
|
|
}
|
|
println!("forktest pass.");
|
|
0
|
|
}
|