[英]clone( ) system call not working correctly
我花了很多时间来了解在linux
使用clone()
系统调用的方法。 我编写了以下程序,但无法正常运行。
#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
这个过程实际上并没有被杀死!! 它仍在运行...请给点灯光...谢谢...
void *stack=malloc(65536); int Pid=clone(sched2, stack, 0, NULL);
在大多数体系结构中,堆栈向下增长。 您可能会想说:
clone(sched2, stack + 65536, 0, NULL);
对于第二个问题,这个过程是死的,但家长没等它。 这是所谓的“僵尸”过程。
它已经死了,但是父母忘了收割。 使用wait(2)
函数之一来执行此操作,可以选择设置SIGCHLD
处理程序。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.