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}