我花了很多时间来了解如何使用clone()
系统调用linux
。我编写了以下程序,但它无法正常工作......
#define _GNU_SOURCE
#include<stdio.h>
#include<stdlib.h>
#include<signal.h>
#include<sched.h>
#include<sys/types.h>
int sched2()
{
printf("it is working\n");
}
int main(int argc, char *argv[])
{
printf("in the main\n");
void *stack=malloc(65536);
int Pid=clone(sched2, stack, 0, NULL);
printf("%d\n",Pid );
if(Pid==-1)
{
printf("clone error\n");
exit(1);
}
sleep(100);
printf("yea2");
exit(0);
}
it is working
正如我所料,应该打印字符串......以及......
in the main
2534
它没有打印it is working
字符串。此外,当我获取新创建的内核线程的进程 ID 并发出
kill -9 2534
我使用 ps 命令检查了终端上的进程,它应该是这样的......
PID TTY TIME CMD
2209 pts/2 00:00:00 bash
2533 pts/2 00:00:00 a.out
2534 pts/2 00:00:00 a.out <defunct>
2535 pts/2 00:00:00 ps
该过程实际上没有被杀死!它仍在运行...请点亮...谢谢...