我是 Linux 新手。我想同时创建子进程和父进程。但我失败了。这是我的代码。有谁能够帮助我?
#define _GNU_SOURCE
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sched.h>
#include <signal.h>
#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);
}
我希望它们同时运行,但父进程要等到子进程完成。
From clone http://man7.org/linux/man-pages/man2/clone.2.html
克隆_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);
并且父进程和子进程将同时运行。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)