Привет!
Есть задача запустить программу и дождаться ее выполнения. С первого взгляда это просто:
system("./p1.elf");
Вот только программа p1 (к исходникам которой нет доступа) вызывает другой процесс, уводя его, судя по всему в фон (&).
Описать программами можно примерно так: Мой программа:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(void) {
system("./p1.elf");
printf("p1 exited\n");
sleep(5);
return 0;
}
#include <stdio.h>
#include <stdlib.h>
int main(void) {
system("./p2.elf &");
return 0;
}
#include <stdio.h>
#include <unistd.h>
int main(void) {
sleep(3);
printf("report created\n");
return 0;
}
При запуске, соответственно, будет следующий геморрой:
$ gcc main.c -o main.elf && gcc p1.c -o p1.elf && gcc p2.c -o p2.elf
$ ./main.elf
p1 exited
report created
Зачем мне это нужно - p2 формирует отчет, который мне нужно прочитать. Я жду завершения работы, чтобы взять отчет из файла. Сейчас стоит костыль - я жду обновления файла после выхода p1. Но файл может не обновиться или я буду ждать слишком долго в случае если p1 завершилась без отчета.
Как мне в main.c дождаться выполнения всех дочерних процессов?