Hi On Mon, Jun 16, 2014 at 2:32 PM, Geunsik Lim <[email protected]> wrote: > Hi all, > > Recently, i checked that there are some of the "close_all_fds" functions as > follows > Why we Systemd run this functions? Whey this functions need Systemd's > management? > > invain@u1204lgs:/sandbox/tizentvfolder/systemd$ grep -R "close_all_fds" ./* > ./src/nspawn.c: close_all_fds(NULL, 0); > ./src/util.c:int close_all_fds(const int except[], unsigned n_except) { > ./src/util.c: close_all_fds(NULL, 0); > ./src/main.c: close_all_fds(NULL, 0); > ./src/spawn-agent.c: close_all_fds(NULL, 0); > ./src/execute.c: err = close_all_fds(socket_fd >= 0 ? > &socket_fd : fds, > ./src/execute.c: err = close_all_fds(fds, n_fds); > ./src/util.h:int close_all_fds(const int except[], unsigned n_except);
I didn't look for all occurrences, but usually this function is a safety net: We set O_CLOEXEC on all FDs, therefore, on execve() they get closed. However, in case we missed this somewhere, close_all_fds() destroys those FDs for us. Furthermore, it also destroys any global fds (stdin/stdout/...) in case we don't want to leak them into our child. Thanks David _______________________________________________ systemd-devel mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/systemd-devel
