2016-02-07 2 views
1

Допустим, у меня есть две функции х & у и обе эти функции вызов другой функции г.Как выбрать между ожиданием и не ждать в родительском процессе?

I fork в этой функции z.

Что я хочу сделать следующее.

  1. Если моя функция призвание х. подождите, пока ребенок закончит в родительском процессе .

  2. else Если вызывающая функция y. не дожидайтесь ребенка (как будто он работает ).

Как я могу достичь такого поведения, и если это возможно?

или я должен сделать две отдельные функции z1 & z2

где в z1 я раскошелиться и ждать, и в z2 I вилкой и я не жду.

, и я хочу сделать это в с

+2

Что не так с передачей 'wait' boolean в z? –

ответ

1

Вы можете передать аргумент z, указывающее, следует ли z ждать ребенка. Кроме того, вы можете сделать z вернуть идентификатор процесса ребенка, не дожидаясь его. После этого вы можете вручную вызвать waitpid в x явно ждать процесса отделилась от z:

waitpid(z(), NULL, 0); 

Конечно, вам нужно сделать обработку ошибок, а также.

+0

Как я могу закончить программу, когда я предпочитаю не ждать. Он просто замерзает в конце. Как я могу его закончить – Pro

+0

@Pro Мне нужна дополнительная информация, чтобы ответить на этот вопрос. Не могли бы вы опубликовать код, демонстрирующий эту проблему? Вероятно, лучше всего, если вы зададите новый вопрос. – fuz

+0

В основном я делаю execvp в строке, содержащей много команд из файла. И я пытаюсь запустить все команды вместе. так что результаты могут быть смешаны. Все работает нормально, за исключением того, что когда это делается, он не выходит из программы в терминале – Pro

Смежные вопросы