我想使用原始克隆系統,但我找不到任何適當的文檔。 我試圖編寫一個小程序來嘗試它,但最終會出現分段錯誤。原始克隆系統調用
我不明白我錯在哪裏。
這裏是小應用:
define STACK_SIZE 0x10000
define BUFSIZE 200
#define _GNU_SOURCE
void hello(){
fprintf(stderr,"Hello word\n");
_exit(0);
}
int main()
{
int res;
void *stack = mmap(0, STACK_SIZE, PROT_READ|PROT_WRITE,
MAP_PRIVATE|MAP_ANONYMOUS, -1, 0);
pid_t ptid, tid;
printf("Stack %p\n", stack + STACK_SIZE);
memset(stack, 0, STACK_SIZE);
res= syscall(SYS_clone,CLONE_SIGHAND|CLONE_FS|CLONE_VM|CLONE_FILES,stack + STACK_SIZE, &tid,&ptid,NULL);
if (!res)
hello();
printf("Clone result %x\n", res);
waitpid(-1, NULL, __WALL);
return 0;
}
不要使用'clone'系統調用(基本上保留給線程庫實現者)。使用'pthread'庫。 –
我需要使用它,因爲我正在使用系統調用。 –
您還需要'futex'系統調用,它需要一些機器特定的彙編代碼。你應該解釋爲什麼你不能使用pthreads,你應該深入內核源代碼來理解發生的事情。 –