在使用clone函数时,需要在代码的开始(顶部)处引入一个宏和头文件,如下
#define _GNU_SOURCE /*注意摆放位置*/
#include <sched.h> /*注意摆放位置*/
#include<sys/types.h>
#include<sys/syscall.h>
#include<unistd.h>
#include<stdio.h>
#include<stdlib.h>
// Linux下一个函数调用栈 2页 8kb
#define FIBER_STACK 8192
int do_something(void* s)
{
printf(" pid = %d,LWP id = %lu",getpid(),syscall(SYS_gettid));
return 0;
}
int main()
{
void* stack;
stack = malloc(FIBER_STACK);
/*栈顶在高地址处,向下生长*/
clone(do_something,(char*)stack+FIBER_STACK,CLONE_VM|CLONE_VFORK,NULL);
}
“`