diff options
author | Eelco Dolstra <eelco.dolstra@logicblox.com> | 2012-06-25T19·45-0400 |
---|---|---|
committer | Eelco Dolstra <eelco.dolstra@logicblox.com> | 2012-06-25T19·45-0400 |
commit | 1db38ae81bd91d781ece9c0cfb995e743e68e951 (patch) | |
tree | 52933112d6936d8067b65b02dd261bfc2890fea3 /src/libutil/util.cc | |
parent | 5489086456ca13b2e884edecf7505235d214a594 (diff) |
When using chroots, use a private PID namespace
In a private PID namespace, processes have PIDs that are separate from the rest of the system. The initial child gets PID 1. Processes in the chroot cannot see processes outside of the chroot. This improves isolation between builds. However, processes on the outside can see processes in the chroot and send signals to them (if they have appropriate rights). Since the builder gets PID 1, it serves as the reaper for zombies in the chroot. This might turn out to be a problem. In that case we'll need to have a small PID 1 process that sits in a loop calling wait().
Diffstat (limited to 'src/libutil/util.cc')
-rw-r--r-- | src/libutil/util.cc | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/src/libutil/util.cc b/src/libutil/util.cc index 842cf3ea47b7..b188a9fc0e79 100644 --- a/src/libutil/util.cc +++ b/src/libutil/util.cc @@ -779,8 +779,11 @@ void Pid::kill() int status; while (waitpid(pid, &status, 0) == -1) { checkInterrupt(); - if (errno != EINTR) printMsg(lvlError, - (SysError(format("waiting for process %1%") % pid).msg())); + if (errno != EINTR) { + printMsg(lvlError, + (SysError(format("waiting for process %1%") % pid).msg())); + break; + } } pid = -1; |