parent
a6b278fe10
commit
ad28f5f627
@ -0,0 +1,32 @@
|
||||
#![no_std]
|
||||
#![no_main]
|
||||
|
||||
#[macro_use]
|
||||
extern crate user_lib;
|
||||
|
||||
// use user_lib::{sigaction, sigprocmask, SignalAction, SignalFlags, fork, exit, wait, kill, getpid, sleep, sigreturn};
|
||||
use user_lib::*;
|
||||
|
||||
fn func() {
|
||||
println!("user_sig_test succsess");
|
||||
sigreturn();
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub fn main() -> i32 {
|
||||
let mut new = SignalAction::default();
|
||||
let old = SignalAction::default();
|
||||
new.handler = func as usize;
|
||||
|
||||
println!("signal_simple: sigaction");
|
||||
if sigaction(SIGUSR1, &new, &old) < 0 {
|
||||
panic!("Sigaction failed!");
|
||||
}
|
||||
println!("signal_simple: kill");
|
||||
if kill(getpid() as usize, SIGUSR1) < 0 {
|
||||
println!("Kill failed!");
|
||||
exit(1);
|
||||
}
|
||||
println!("signal_simple: Done");
|
||||
0
|
||||
}
|
@ -0,0 +1,44 @@
|
||||
#![no_std]
|
||||
#![no_main]
|
||||
|
||||
#[macro_use]
|
||||
extern crate user_lib;
|
||||
|
||||
use user_lib::{sigaction, sigprocmask, SignalAction, SignalFlags, fork, exit, waitpid, kill, getpid, sleep, sigreturn};
|
||||
|
||||
fn func() {
|
||||
println!("user_sig_test succsess");
|
||||
sigreturn();
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub fn main() -> i32 {
|
||||
let pid = fork();
|
||||
if pid==0{
|
||||
let mut new = SignalAction::default();
|
||||
let old = SignalAction::default();
|
||||
new.handler = func as usize;
|
||||
|
||||
println!("signal_simple2: child sigaction");
|
||||
if sigaction(10, &new, &old) < 0 {
|
||||
panic!("Sigaction failed!");
|
||||
}
|
||||
sleep(1000);
|
||||
println!("signal_simple2: child done");
|
||||
exit(0);
|
||||
} else if pid >0 {
|
||||
println!("signal_simple2: parent kill child");
|
||||
sleep(500);
|
||||
if kill(pid as usize, 1<<10) < 0 {
|
||||
println!("Kill failed!");
|
||||
exit(1);
|
||||
}
|
||||
println!("signal_simple2: parent wait child");
|
||||
let mut exit_code = 0;
|
||||
waitpid(pid as usize, &mut exit_code);
|
||||
println!("signal_simple2: parent Done");
|
||||
exit(0);
|
||||
}
|
||||
|
||||
0
|
||||
}
|
Loading…
Reference in new issue