繁体   English   中英

clone()系统调用无法正常工作

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM