如何在没有第一个参数 fn 的情况下调用带有标志的 fork() 或 clone()?

How to call fork() with flags or clone() without the first argument fn?

我想用标志 CLONE_PARENT 调用 fork(),但是,我找不到方法来做到这一点。

clone() 在大多数情况下可能是一个不错的选择,但我想在信号处理程序中调用 fork() 并在信号处理程序完成后返回上一个流程。

我可能会更改内核,所以任何需要修改内核的解决方案都可以。

我试图直接调用系统调用 clone,但我不知道如何在用户 space.

中获取 struct pt_regs

只需使用clone。虽然 fork syscall 仍然存在,但在 glibc 的较新版本下,fork 库调用只是 clone 的链接器别名,带有一些特殊参数

对于你没有的任何东西 [嗯,大多数东西] 你可以通过 NULL

这里有一个小片段作为开始:

#define ARCH_FORK() \
  INLINE_SYSCALL (clone, 4,                                                   \
                  CLONE_CHILD_SETTID | CLONE_CHILD_CLEARTID | SIGCHLD, 0,     \
                  NULL, &THREAD_SELF->tid)