code wiki / _hdl_build / nx_orchestrate_signal_audit_t48.nx

nx_orchestrate_signal_audit_t48.nx source

↩ module page · 23 lines · 1145 B

1import "nx_syscalls.nx" 2import "nx_gate_verdict.nx" 3const AUDIT_CHILD_WAIT_MS: i64 = 10000 4const AUDIT_KILL_SIGNAL: i64 = 9 5func main(argc: i64, argv: *i64) -> i64 { 6 let ctr: *i64 = sys_mmap(32) as *i64 7 let pid: i64 = sys_fork() 8 if pid < 0 { return 2 } 9 if pid == 0 { sys_sleep_ms(AUDIT_CHILD_WAIT_MS); sys_exit(7); return 7 } 10 let killed: i64 = nx_kill(pid, AUDIT_KILL_SIGNAL) 11 let st: *i64 = sys_mmap(16) as *i64 12 let waited: i64 = sys_wait4(pid, st, 0) 13 gv_check("owned worker signal delivered", killed == 0, ctr) 14 gv_check("owned worker reaped", waited == pid, ctr) 15 gv_check("actual worker signal observed", wait_term_signal(st[0]) == AUDIT_KILL_SIGNAL, ctr) 16 let old: i64 = (st[0] / 256) & 0xff 17 gv_check("negative control old orchestration decoder reports false success", old == 0, ctr) 18 gv_check("existing shared decoder refuses actual killed worker", wait_status_rc(st[0]) != 0, ctr) 19 gv_check("normal success remains success", wait_status_rc(0) == 0, ctr) 20 gv_check("normal nonzero remains nonzero", wait_status_rc(7 * 256) == 7, ctr) 21 if ctr[0] != ctr[1] { return 3 } 22 return 0 23}