gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 04:49:17 25 4
gpt4 key购买 nike

我花了很多时间来了解如何在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 isworking 应该被打印...以及...

in the main
2534

它没有打印it isworking字符串。此外,当我获取新创建的内核线程的进程 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);

对于第二个问题,进程已死,但父进程还没有等待。这是一个所谓的“僵尸”进程。

关于linux - clone() 系统调用无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12374109/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com