gpt4 book ai didi

c - 在试图终止父进程时,子进程仍在运行

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:05:35 24 4
gpt4 key购买 nike

给定以下代码:

fork :

if(strcmp(str,"mkDir")==0)
{
str = strtok(NULL," ");
switch(pid_child = fork())
{
case -1:
{
printf("Problem with producing a new process!\n");
exit(1);
break;
}
case 0:
{
wait(1);
strcat(curRoot,str);
strcat(curRoot,"\\");
if(num_dir>0)
{
free(arr);
num_dir=0;
}
if(numFile>0)
{
free(files);
numFile=0;
}
break;
}
default:
{
pid = getpid();
*cur_pid = pid;
arr = add_dir(arr,str,pid_child,&num_dir);
break;
}
}
}//if MKDIR

试图终止进程:

struct Directory* rmDir(struct Directory* dirs,char* name,int *size)
{
int i,m=0,j;
struct Directory* temp=NULL;
j = find_dir(dirs,name,*size);
if(j==-1)
{
printf("The directory does not exist\n");
return dirs;
}
else
{
temp = (struct Directory*)malloc(sizeof(struct Directory)*((*size)-1));
for (i=0; i<*size;i++)
{
if(i!=j)
{
temp[m]=dirs[i];
m++;
}
}//for
kill(dirs[j].dir_pid,SIGKILL);
(*size)--;
free(dirs);
printf("Directory - %s was removed successfully!\n",name);
return temp;
}
}//rmDir

当我尝试终止“父”进程时,子进程继续运行?

这是为什么呢?

问候

最佳答案

问题是您只终止了一个进程。 SIGKILL 仅发送到您指定的一个进程。您可以使用进程组一次将它发送给多个,但它要么全有要么全无,这在这里无济于事。

所以,首先,不要使用 SIGKILL,使用 SIGTERM。

然后,在子进程中安装一个 SIGTERM 处理程序。处理程序应该依次向它自己的 child 发出信号,然后退出。

您需要阅读 signalsigaction。有手册页和许多网络资源。

关于c - 在试图终止父进程时,子进程仍在运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13975871/

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