Я думаю, что это будет работать, но я не совсем уверен в некоторых аргументах указателя.
pid_t child = clone( child_f, child_stack,
/* int flags */ SIGCHLD,
/* argument to child_f */ NULL,
/* pid_t *pid */ NULL,
/* struct usr_desc * tls */ NULL,
/* pid_t *ctid */ NULL );
В параметре flags его младший байт используется для указания, какой сигнал отправить, чтобы уведомить родителя потока о том, что он умирает или останавливается. Я считаю, что все фактические флаги включают переключатели, которые отличаются от fork
. Глядя на код ядра, можно предположить, что это так.
Если вы действительно хотите получить что-то близкое к fork
, вы можете вызвать sys_clone
, который не принимает указатель на функцию и вместо этого возвращает дважды, как fork
.