Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 关闭另一函数上父函数的子函数_C_Linux_Process_Fork - Fatal编程技术网

C 关闭另一函数上父函数的子函数

C 关闭另一函数上父函数的子函数,c,linux,process,fork,C,Linux,Process,Fork,我有个问题。我有一个函数a,其中我做了一个fork,然后我想在一些指令完成后或者在用户请求时终止这个fork。 大概是这样的: int main{ bool child_started =false; pid_t child_pid; while bool{ //request user to make input //users makes a input. if(input == 1){ functionA(); }els

我有个问题。我有一个函数a,其中我做了一个fork,然后我想在一些指令完成后或者在用户请求时终止这个fork。 大概是这样的:

  int main{
    bool child_started =false;
    pid_t child_pid;
    while bool{
    //request user to make input
    //users makes a input.

    if(input == 1){
    functionA();
    }else if(input == 2 && child_started){
    //kill child
    //I tried kill(child_pid,SIGKILL); but it doesnt work
    }
和功能A

void functionA(){

child_pid= fork();
if(child_pid == 0){
child_started = true;
//instructions
exit(0); //I tried this but i get a zombie process
child_started = false;

}else if (child_pid<0){
//error handling
}
}
void function(){
child_pid=fork();
如果(子项pid==0){
child_start=true;
//指示
退出(0);//我尝试了此操作,但得到了一个僵尸进程
child_start=false;

}else if(child_pidfork()对于子进程返回0,对于父进程返回非零。在这里,您在创建子进程后立即终止它(exit()terminate process,它不是返回)。当用户尝试使用命令行终止时,如果子进程已经完成执行,那么kill在这里不起作用。

这是什么意思“它不起作用”?你能详细说明一下吗?当然,请尝试创建一个演示给我们看。至于僵尸进程,父进程需要让其子进程“收获”僵尸。好吧,我认为很清楚什么是“它不起作用”"意思是。意思是它不起作用。我想从父母那里杀了一个孩子,但我尝试的不起作用。你需要告诉我们它怎么不起作用。在问题本身的主体中。应该发生什么,发生了什么。假设或猜测会导致错误答案。我还建议你检查返回的内容,如果返回失败检查
errno
查看错误是什么。所以问题是僵尸进程的问题,而不是
kill
本身的问题?如果我们不知道这些细节,因为您没有告诉我们,您认为我们将如何帮助您?请阅读,尤其是。最重要的是,请再次检查我的代码。在退出()之前这里有一些说明。这些说明需要一些时间,用户有机会故意向孩子输入一个2。这就是我所寻求的。用户有机会意味着它一直不是一个定义的行为,你不确定孩子是否已经执行了。试着看看kill返回什么,看看孩子是否在场或者当你试图杀死它的时候没有。我检查孩子是否已经完成,我只是没有在这里添加它。我有一个bool变量指示孩子的状态。我将在示例代码中添加它