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);