Я пишу программу, которая использует процессор для обработки некоторой информации. Программа зависит от ядер процессора. Если имеется 2 ядра, программа дважды выполнит fork (), чтобы создать 2 экземпляра работы и вернуть результаты.
#define CORES 4
void worker(int id)
{
// blablabla work here
printf("worker %d\n",id);
printf("[%d] I'm child of %d\n",getpid(),getppid());
}
int main (int argc, const char * argv[])
{
int pid;
for (int i=0; i<CORES; i++)
{
pid = fork();
if (pid == 0) // if child
{
worker(i);
exit(0);
}
else if (pid>0)
{
printf("[%d] Big father here!\n",getpid());
}
else
{
printf("--- Fork problem ---");
}
}
return 0;
}
Мои вопросы:
- Что я могу сделать, чтобы программа завершилась только тогда, когда ВСЕ дочерние процессы завершат обработку необходимой информации? (я думаю, что они становятся сиротами)
- Как рассчитать время, прошедшее с начала работы первого процесса до его завершения