【问题标题】:cant kill child process不能杀死子进程
【发布时间】:2015-03-06 21:19:06
【问题描述】:

因此,我将父进程的代码与子进程的代码放在不同的文件中。我必须在父母的代码中杀死孩子,但它永远不会被杀死。这是我到目前为止所得到的:

#define NO_OF_CHILDREN 3

int rtn = 1; 
for( count = 0; count < NO_OF_CHILDREN; count++ ) {

    if( rtn != 0 ) {
        rtn = fork(); 
        pid[count] = rtn;
    }   
     else {
        break;
    }
}

numKids = count;
sprintf(numeroFilhos,"%d",numKids);  

if( rtn == 0 ) {        
    execl("filho",numeroFilhos,NULL); 
}

else
{

for(i=0; i < numKids; i++)
{   
   usleep(2000000);   
   matar = kill(pidDosFilhos[i],SIGKILL);   
} 

printf("are the children dead? %d \n",matar);

} 
    exit(0);

我的杀戮返回“-1”...有人可以帮帮我吗?

【问题讨论】:

  • 请尝试发布一个独立的最小示例。如果没有函数和不一致的缩进,你的代码很难理解。
  • 当 kill() 返回 -1 时,我建议检查 errno 的值,看看错误是什么。 perror(3) 函数对此很有用。

标签: c fork kill


【解决方案1】:

在你杀死他们之前,孩子们可能已经死了。添加一个暂停();在 execl 之后,这将使孩子们挂起,直到他们收到 any 信号。当您杀死它们时,如果另一个进程已发送信号并取消暂停其中一个子进程,您仍然可能得到 -1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-14
    • 1970-01-01
    • 2010-12-08
    • 2016-01-24
    • 1970-01-01
    相关资源
    最近更新 更多