On Sun, 2018-11-18 at 09:21 +0000, M. J. Everitt wrote: > On 18/11/18 09:18, Michał Górny wrote: > > On Sun, 2018-11-18 at 09:04 +0000, M. J. Everitt wrote: > > > On 18/11/18 08:53, Michał Górny wrote: > > > > Signed-off-by: Michał Górny <mgo...@gentoo.org> > > > > --- > > > > bin/pid-ns-init | 25 +++++++++++++++++++++++++ > > > > lib/portage/process.py | 11 ++++++----- > > > > 2 files changed, 31 insertions(+), 5 deletions(-) > > > > create mode 100644 bin/pid-ns-init > > > > > > > > diff --git a/bin/pid-ns-init b/bin/pid-ns-init > > > > new file mode 100644 > > > > index 000000000..90660571a > > > > --- /dev/null > > > > +++ b/bin/pid-ns-init > > > > @@ -0,0 +1,25 @@ > > > > +#!/usr/bin/env python > > > > +# Copyright 2018 Gentoo Authors > > > > +# Distributed under the terms of the GNU General Public License v2 > > > > + > > > > +import os > > > > +import sys > > > > + > > > > + > > > > +def main(argv): > > > > + if len(argv) < 2: > > > > + return 'Usage: {} <main-child-pid>'.format(argv[0]) > > > > + main_child_pid = int(argv[1]) > > > > + > > > > + # wait for child processes > > > > + while True: > > > > + pid, status = os.wait() > > > > + if pid == main_child_pid: > > > > + return os.WEXITSTATUS(status) > > > > + > > > > + # this should never be reached > > > > + return 127 > > > > + > > > > + > > > > +if __name__ == '__main__': > > > > + sys.exit(main(sys.argv)) > > > > diff --git a/lib/portage/process.py b/lib/portage/process.py > > > > index dee126c3c..75ec299f0 100644 > > > > --- a/lib/portage/process.py > > > > +++ b/lib/portage/process.py > > > > @@ -544,13 +544,14 @@ def _exec(binary, mycommand, opt_name, fd_pipes, > > > > env, gid, groups, uid, umask, > > > > else: > > > > if unshare_pid: > > > > # pid namespace > > > > requires us to become init > > > > - # TODO: do > > > > init-ty stuff > > > > - # therefore, > > > > fork() ASAP > > > > fork_ret = > > > > os.fork() > > > > if fork_ret != > > > > 0: > > > > - pid, > > > > status = os.waitpid(fork_ret, 0) > > > > - assert > > > > pid == fork_ret > > > > - > > > > os._exit(status) > > > > + > > > > os.execv(portage._python_interpreter, [ > > > > + > > > > portage._python_interpreter, > > > > + > > > > os.path.join(portage._bin_path, > > > > + > > > > 'pid-ns-init'), > > > > + > > > > '%s' % fork_ret, > > > > + > > > > ]) > > > > if unshare_mount: > > > > # mark the > > > > whole filesystem as slave to avoid > > > > # mounts > > > > escaping the namespace > > > > > > Why in python?! Surely a small C app would be significantly more > > > efficient .. > > > > > > > Surely adding a new build system for C apps would be entirely justified > > by the necessity of premature optimization of program that spends ~100% > > of its time in wait(). > > > > Forgive my ignorance then .. what purpose does a process have which simply > wait()s ?! .. no, on second thoughts, don't answer that question, I'm > unlikely to like the answer anyway ... >
Well, if you find it useless, then I would suggest you save some space by doing: rm /sbin/init -- Best regards, Michał Górny
signature.asc
Description: This is a digitally signed message part