2015-03-06 3 views
-1

Итак, у меня есть код для родительского процесса в другом файле, кроме кода дочернего процесса. Я должен убить ребенка в коде родителя, но он никогда не может быть убит. Вот что я получил до сих пор:can not kill child process

#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» для возвращения убить ... может ли кто-нибудь мне помочь?

+0

Просьба попытаться опубликовать автономный минимальный пример. Ваш код трудно отслеживать без функций и непоследовательного отступа. – dhke

+0

Когда kill() возвращает -1, я предлагаю проверить значение errno, чтобы узнать, что такое ошибка. Функция perror (3) может быть полезна для этого. – mshildt

ответ

0

Дети, вероятно, мертвы, прежде чем вы сможете их убить. Добавьте паузу(); после execl это заставит детей висеть, пока они не получат любой сигнал. Когда вы их убьете, вы все равно можете получить -1, если другой процесс отправил сигнал и остановил одного из детей.