c - munmap anonymous shared memory in forked child -
i'd know if necessary (or advisable) unmap shared memory (using munmap
) in child created via fork
, if memory obtained in parent, before fork, using mmap(..., map_anonymous | map_shared,...)
, unmapped in parent, wait
child. know whether necessary (or advisable) close file in child, if file opened in parent (before fork, using fopen
) , closed in parent after child terminates.
i thinking of using user-defined signal , signal handler in parent wait child processes, , process -- wheter parent or not -- close file , unmap memory. signal sent processes in group process, in error occurred (i not want pass return values).
actually bit more complex, want know whether need this:
void sig_handler() { if (getpid() == getpgrp()) // parent while (proc_count--) wait(null); // signal has been sent child processes // every single process this: fclose(memory->file); munmap(memory, size); exit(123); }
or completely ok this:
void sig_handler() { if (getpid() == getpgrp()) { while (proc_count--) wait(null); fclose(memory->file); munmap(memory, size); } exit(123); }
i have tried closing file in 1 child process; seemed have no effect in other processes -- assume fd table copied on fork. there way make shared between processes? (probably not, suspect)
any answer appreciated. thank you.
ps. there reason why can't start question greeting (eg. hello) ?
if you're going exit process, there's no point in calling munmap()
. memory unmapped process when process exits.
fclose()
flush buffers holding unwritten data file. in processes - parent , child. whether or not want you.
exit()
implicitly flushes buffers. _exit()
not flush buffers or call other exit handlers.
Comments
Post a Comment