int pd = 0;
pid_t pid = pdfork(&pd, 0);
if (pid == 0) { ... }
cap_rights_t caprights;
if (cap_enter() != 0) { FAIL }
if (cap_rights_limit(pd, cap_rights_init(&caprights, CAP_EVENT)) != 0) { FAIL }
int kq = kqueue();
if (kq == -1) { FAIL }
struct kevent ev;
EV_SET(&ev, pd, EVFILT_PROCDESC, EV_ADD, NOTE_EXIT, 0, NULL);
if (kevent(kq, &ev, 1, NULL, 0, NULL) == -1) { FAIL }
if (kevent(kq, NULL, 0, &ev, 1, NULL) == -1) { FAIL }
int status = (int)ev.data;
return WEXITSTATUS(status);