У меня есть цикл, который создает дочерние процессы n. Процессы переходят в отдельную программу и спят за «х» секунд, а затем возвращаются с статусом выхода «x». Проблема заключается в том, что я стараюсь ждать каждого отдельного процесса. Кажется, что мой вызов wait() ждет последнего выполненного процесса, а затем программа завершает работу. Мне бы хотелось, чтобы из-за того, что когда-либо ребенок вышел, я могу распечатать их информацию, а затем ждать следующего ребенка, чтобы выйти и распечатать свою информацию ... и так далее.wait() не ждет каждого ребенка
код:
int main()
{
char input[12];
int n, i, ch;
pid_t pid;
int status={0};
printf("Enter an integer: ");
fgets(input, 12, stdin);
if (input[10] == '\n' && input[11] == '\0') { while ((ch = fgetc(stdin)) != EOF && ch != '\n'); }
rmnewline(input);
n = atoi(input);
for(i=0; i<=n-1; i++)
{
pid = fork();
if(pid == 0)
execl("/home/andrew/USP_ASG2/sleep", "sleep", NULL);
}
for(i=0; i<=n-1; i++)
{
wait(&status);
if(WIFEXITED(status))
{
int exitstat = WEXITSTATUS(status);
printf("Child %d is dead with exit status %d\n", pid, exitstat);
}
}
}
выход:
In child 15930
In child 15929
In child 15928
Child 15930 is dead with exit status 5
Child 15930 is dead with exit status 5
Child 15930 is dead with exit status 5
Помимо этого: 'i <= n-1' будет более понятным как' i
@WeatherVane No. С смещениями массива, основанными на нуле, 'for (i = 0; i < n; i ++) '- это канонический способ записи цикла' for' в C. Просто Google «c для цикла». См. Много примеров: http://www.codingunit.com/c-tutorial-for-loop-while-loop-break-and-continue http://stackoverflow.com/questions/4604500/use-of-for-in -ac-sharp-application http://www.tutorialspoint.com/cprogramming/c_for_loop.htm http://www.thegeekstuff.com/2012/12/c-loops-examples/ Кроме того, исключение вычитания может привести к немного улучшенная производительность, особенно на архитектуре с головокружительной регистрацией, такой как x86. –
@ AndrewHenle Вы уверены, что вы верно прочитали мой комментарий? Что, если 'n == 0', управление циклом' i <= n-1' может сходить с ума при отсутствии знака. Я написал «яснее», а не «яснее». –