#include #include #include pid_t fork(void) { kern_handle_t new_task = KERN_HANDLE_INVALID, new_space = KERN_HANDLE_INVALID; kern_status_t status = task_duplicate(&new_task, &new_space); if (status != KERN_OK) { return __set_errno(__errno_from_kern_status(status)); } if (new_task == KERN_HANDLE_INVALID) { /* child task */ return 0; } tid_t child = 0; task_config_get(new_task, TASK_CFG_ID, &child, sizeof child); /* parent task */ return child; }