Есть ли способ дифференцировать дочерние процессы, созданные различными функциями fork () в программе.
global variable i;
SIGCHLD handler function()
{
i--;
}
handle()
{
fork() --> FORK2
}
main()
{
while(1)
{
if(i<5)
{
i++;
if( (fpid=fork())==0) --> FORK1
handle()
else (fpid>0)
.....
}
}
}
Можно ли как-то отличить дочерние процессы, созданные FORK1 и FORK2? потому что я пытаюсь уменьшить значение глобальной переменной 'i' в функции обработчика SIGCHLD, и оно должно уменьшаться только для процессов, созданных FORK1 ..
Я попытался использовать массив и сохранить идентификатор процесса дочерних процессов, созданных FORK1, и это делается родительским процессом. Я уменьшу значение 'i' только в том случае, если идентификатор массива мертвого потомка находится в массиве ...
Но я столкнулся с проблемой следующего сценария
child1 , parent1, child1 убит , child2 , child2 убит , parent2
Incase child1, так как он убит после parent1, массив обновлен должным образом.
Но что в случае child2, который уничтожается до того, как его значение pid обновляется parent2 в массиве? Внутри функции обработчика сигнала SIGCHLD, так как значение PID child2 отсутствует в массиве, значение 'i' не уменьшается соответственно ..
Так есть ли лучшее решение для этой проблемы ??