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() в основную функцию, потому что оно понадобится вам, чтобы решить, являетесь ли вы дочерним или родительским процессом.