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(). -- Best regards, Michał Górny
signature.asc
Description: This is a digitally signed message part