我在C中有一个克隆系统调用,它将调用子函数,执行子函数然后返回父级执行一些代码。子进程成功执行,控制返回克隆语句。然后克隆语句崩溃,程序执行终止。
我的C代码是:
void *stack;
stack=(void *)calloc(1,16384);
stack+=16384;
clone(NewFunc, stack, CLONE_VM|CLONE_FILES, NULL);
printf ("Control has returned from clone\n");
从我的NewFunc函数返回控制后,程序执行停止,控件不转移到以下printf语句。这些是我在gdb中的错误消息:
(gdb)
clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:117
117 movq %rax, %rdi
(gdb)
118 call HIDDEN_JUMPTARGET (_exit)
(gdb)
[Inferior 1 (process 16603) exited normally]
请帮助调试此问题。
答案 0 :(得分:0)
我希望在你调试孩子本身时,父实际上会执行printf语句。
为什么不使用fork / wait?