如何使用clone()使父进程和子进程同时运行?

我是linux的新手。 我想同时制作子进程和父进程。 但我失败了。 这是我的代码。 有谁能够帮我?

#define _GNU_SOURCE #include  #include  #include  #include  #include  #define FIBER_STACK 8192 void * stack; int do_something(){ int a = 0; while (a<10){ printf("pid : %d, a = %d\n", getpid(), a++); } exit(1); } int main() { void * stack; stack = malloc(FIBER_STACK); if(!stack) { printf("The stack failed\n"); exit(0); } int a = 0; if (c == 0) clone(&do_something, (char *)stack + FIBER_STACK, CLONE_VM|CLONE_VFORK, 0); while (a<10){ printf("pid : %d, a = %d\n", getpid(), a++); } free(stack); exit(1); } 

我希望它们在同一时间运行,但父进程一直等到子进程完成。

来自clone

CLONE_VFORK (自Linux 2.2起)
如果设置了CLONE_VFORK, 则暂停执行调用进程,直到子进程通过调用execve(2)或_exit(2)(与vfork(2)一样)释放其虚拟内存资源。

如果未设置CLONE_VFORK,则调用后调用进程和子进程都是可调度的,并且应用程序不应依赖于以任何特定顺序发生的执行。

这意味着使用CLONE_VFORK ,它应该等到孩子完成或执行exec

因为你在孩子中运行一个函数,所以你不需要exec 。 只需忽略CLONE_VFORK

 clone(&do_something, (char *)stack + FIBER_STACK, CLONE_VM, 0); 

并且父和子都将同时运行。