UNIX процессы: fork () и wait () - PullRequest
       73

UNIX процессы: fork () и wait ()

2 голосов
/ 13 января 2012

это мой вопрос по fork() и соответствующему wait(), который будет иметь место:

В моем main() я вызываю функцию, скажем, function(), которая использует fork()системный вызов, но я хочу, чтобы function() вернулся, не дожидаясь завершения дочерних процессов, и, таким образом, main() должен ждать их перед завершением.

Итак, возможно ли main() вызвать wait() для детей, которые были fork() ed в теле другой функции, называемой my this main()?

Если даДолжен ли я передать детский код в main() через переменную?

Ответы [ 2 ]

2 голосов
/ 13 января 2012

Если я правильно понимаю вопрос, вы хотите что-то вроде этого:

  • main звонки function
  • function вызывает fork для создания child / ren и возвращает в родительский процесс
  • main позже звонит wait на ребенка / ren

Это нормально ... Номинально, вам не нужно передавать PID (и) ребенка (ов) обратно на main, потому что вы можете просто позвонить wait, чтобы пожать любой дочерний процесс, который существует; однако для использования waitid или waitpid вам потребуется / нужно предоставить их обратно до main. Вы можете либо вернуть PID в main в структуре, подобной связанному списку или массиву с нулевым символом в конце, либо создать какую-то файловую или глобальную переменную для хранения списка.

На странице руководства Linux есть довольно хорошая разбивка для wait(2) (man 2 wait или около того)

1 голос
/ 13 января 2012

Да, main может ждать детей, которые разветвляются в подфункциях.wait () ожидает завершения дочернего процесса.

Вы все равно захотите передать возвращаемое значение fork () в основную функцию, потому что оно понадобится вам, чтобы решить, являетесь ли вы дочерним или родительским процессом..

...