У меня есть прога от которой форкается куча мелких прожек. Но в главной проге порятка 5 метров переменных и они нафиг не нужны в процессах детях. Так вот кто знает как мне избавитсяот этих 5 метров в childah ?
?? Когда выполняется системный вызов fork -- порождённый процесс наследует _весь_ контекст процесса родителя. Собственно потомок отличается от предка только возращённым значением системного вызова. А вот вызвав ехес можно заместить контекст порожденного новым контестом... Можно разве что действительно освободить динамические переменные !
сам же написал "мне на фиг не нужны". Если нужны то можно их передать через shared memory то есть будет процесс родитель отображать в shared memory нужные структуры а смещение передашь через FIFO потом приведешь к тому что тебе нужно, будешь жить при певаючи. :-))
Эти "5 метров переменных" никак не мешают. Благодаря механизму copy-on-write, в потомке(ах) эти переменные не займут дополнительной памяти, если только ты не начнешь изменять их. Попытка освободить динамически выделенную память в потомке не только бесполезна, но и вредна. Бесполезна, т.к. free() не возвращает память системе. Вредна, т.к. при освобождении памяти ты изменишьь copy-on-write страницы и система создаст их копию, отняв физическую память.
Можно делать exec(),который заменит все адресное пространство потомка, но смысла в этом особого нет, ибо ничего на этом выиграть не удастся. Правильное решение -- оставить эти переменные как есть и забыть про них с легким сердцем.