code wiki / (root) / nx_pid_diag.nx

nx_pid_diag.nx source

↩ module page · 26 lines · 1120 B

1// nx_pid_diag.nx -- diagnose getpid + ml_pid_alive (the queue/tend/model-lane self-pid primitive). 2// license_tier: ORIGINAL expect_exit: 0 3import "nx_model_lane_core.nx" 4const K_MAGIC_2000: i64 = 2000 5 6func pd_gp(nr: i64) -> i64 { return __syscall(nr, 0, 0, 0, 0, 0, 0) } 7 8func main(argc: i64, argv: *i64) -> i64 { 9 std_puts("getpid(39)=" as *u8) std_pdec(pd_gp(39)) 10 std_puts(" getpid(172)=" as *u8) std_pdec(pd_gp(172)) 11 std_puts(" getpid(39)_alive=" as *u8) std_pdec(ml_pid_alive(pd_gp(39))) 12 std_puts(" getpid(172)_alive=" as *u8) std_pdec(ml_pid_alive(pd_gp(172))) 13 std_puts("\n" as *u8) 14 // fork-return pid (reliable): child sleeps, parent checks its liveness 15 let pid: i64 = sys_fork() 16 if pid == 0 { sys_sleep_ms(K_MAGIC_2000); sys_exit(0) } 17 std_puts("fork_child_pid=" as *u8) std_pdec(pid) 18 std_puts(" child_alive=" as *u8) std_pdec(ml_pid_alive(pid)) 19 std_puts("\n" as *u8) 20 let st: *i64 = sys_mmap(64) as *i64 21 sys_wait4(pid, st, 0) 22 std_puts("after_reap child_alive=" as *u8) std_pdec(ml_pid_alive(pid)) 23 std_putln("" as *u8) 24 sys_exit(0) 25 return 0 26}