如何在没有第一个参数 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)
我想用标志 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)