Нет, вы неправильно пожинаете ребенка. В вашем случае, если дочерний процесс завершится до завершения родительского процесса, дочерний процесс станет зомби. Затем, когда родительский процесс завершится, дочерний процесс будет переименован в init
(независимо от того, закончил ли он, является ли он зомби или все еще работает). init
тогда пожинает ребенка для вас.
Чтобы пожинать ребенка, добавьте вызов к wait()
до exit
.
Кстати, у вас есть еще одна ошибка - вы создаете канал после fork
, поэтому каждый из родителей и потомков создает (разные) каналы - они не связаны. Переместите if (pipe(...
вверх до fork()
.