如下代码, 指定了 CLONE_VFORK | CLONE_NEWCGROUP, 但没有指定 CLONE_NEWPID
设想中的效果应该是 开启一个子进程, 返回一个正常 pid;
但实际效果是没有看到子进程, 返回的 pid 却是 1;
然后只指定 CLONE_VFORK, 设想中的效果应该类似 vfork; 实际效果是 execv(emu, (char* const*) argv); 已经执行完毕,
ps 中已经能看到子进程; 但 clone 却没有返回, 看样子是永远返回不了了
请问这是怎么回事?
static int child(void* arg)
{
char** pch = (char **) arg;
char* core = pch[0];
char* mem = pch[1];
char* emu = pch[2];
char* name = pch[3];
char* argv[] = {
emu,
"-cores",
core,
"-memory",
mem,
"-avd",
name,
"-no-boot-anim",
"-camera-back",
"none",
"-camera-front",
"none",
"-no-window",
"-no-sim",
"-netfast",
"-noaudio",
"-partition-size",
"2048",
NULL
};
printf("clone------ssssssssss---------%d\n", (int) getpid());
execv(emu, (char* const*) argv);
_exit(-1);
__builtin_unreachable();
}
#define STACK_SIZE (sizeof(int) * 1024)
static int vork_and_exec(char* addr)
{
char* stack = addr + STACK_SIZE;
pid_t pid = clone(child, stack, CLONE_VFORK | CLONE_NEWCGROUP | CLONE_FILES |
CLONE_FS | CLONE_VM | CLONE_IO | CLONE_SIGHAND | CLONE_THREAD, addr);
printf("clone---------------%d\n", (int) pid);
return pid;
}