2017-01-14 5 views
0

Я пытаюсь загрузить exec в файл из более чем 5 раз и сохранить результаты. Я использую вилочного-Exec-ожидание в цикле, это то, как он выглядит:fork exec wait loop for the command line Введенное значение

for(i = 0; i< Number_of_Processes; i++){ 
      pid = fork(); 
      if(pid == 0) 
      { 
       execl(...); 
       exit(EXIT_Failure); 
      } 
      else if(pid > 0) 
      { 
       wait(&status); 
       result = WEXITSTATUS; 
      } 
} 

Проблема заключается в том, выполняется второй файл первый раз правильно, а затем перепечатывает первый результат в течение 5 раз (или что бы ни вводил пользователь) Я пробовал так много других способов, например, перерыв, когда это pid == 0, но это не сработало. я не смог найти правильный пример того, как использовать exec в цикле, поэтому я застрял часами, пытаясь перемещать функции вверх и вниз и ничего не получаю. Что бы я ни делал, я не вижу второго выполнения внутреннего файла.

+0

Какой результат это печать? Кстати, 'WEXITSTATUS' - это макрос, который принимает значение вашего' status'. См. Пример [здесь] (http://man7.org/linux/man-pages/man2/waitpid.2.html). – chrisaycock

+0

@chrisaycock первая строка моего результата - это то, что я ожидаю от моего кода, но вторая строка, а остальные - это то же самое, что и первое, подобное exec, не запускалось более одного раза – yasamin

+1

Поскольку вы знаете, что такое 'pid' вы ожидаете, я предлагаю вам использовать 'waitpid' вместо' wait'. Возможно, вы поймаете неудачное завершение ребенка. – DyZ

ответ

0

Видимо это была проблема времени, когда я добавить sleep(1) непосредственно перед execl в дочернем процессе, он фиксируется все и execed какие нужны процессам один за другим и отпечатанные истинные результаты

for(i = 0; i< Number_of_Processes; i++){ 
      pid = fork(); 
      if(pid == 0) 
      { 
       sleep(1); 
       execl(...); 
       exit(EXIT_Failure); 
      } 
      else if(pid > 0) 
      { 
       wait(&status); 
       result = WEXITSTATUS; 
      } 
}