如何使用flags或clone()调用fork()而不使用第一个参数fn?

时间:2015-10-29 02:26:39

标签: linux system-calls

我想用fork()标记CLONE_PARENT,但是,我找不到办法做到这一点。

在大多数情况下,

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

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

我尝试直接调用系统调用clone,但我不知道如何在用户空间中获取struct pt_regs

1 个答案:

答案 0 :(得分:0)

只需使用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)