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

Это мой вопрос fork() и соответствующие wait() Это будет происходить:

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

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

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

2 ответа

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

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

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

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

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

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

Другие вопросы по тегам