1
0
Fork 0
mirror of https://github.com/NixOS/nix synced 2025-06-30 03:23:16 +02:00

Use vfork() instead of fork() if available

Hopefully this reduces the chance of hitting ‘unable to fork: Cannot
allocate memory’ errors.  vfork() is used for everything except
starting builders.
This commit is contained in:
Eelco Dolstra 2012-11-09 18:00:33 +01:00
parent 48c19c4633
commit ea89df2b76
6 changed files with 51 additions and 22 deletions

View file

@ -760,8 +760,8 @@ Pid::operator pid_t()
void Pid::kill()
{
if (pid == -1) return;
if (pid == -1 || pid == 0) return;
printMsg(lvlError, format("killing process %1%") % pid);
/* Send the requested signal to the child. If it has its own
@ -883,7 +883,8 @@ string runProgram(Path program, bool searchPath, const Strings & args)
/* Fork. */
Pid pid;
pid = fork();
pid = maybeVfork();
switch (pid) {
case -1:
@ -955,6 +956,13 @@ void setuidCleanup()
}
#if HAVE_VFORK
pid_t (*maybeVfork)() = vfork;
#else
pid_t (*maybeVfork)() = fork;
#endif
//////////////////////////////////////////////////////////////////////

View file

@ -266,6 +266,9 @@ void closeOnExec(int fd);
sanitize file handles 0, 1 and 2. */
void setuidCleanup();
/* Call vfork() if available, otherwise fork(). */
extern pid_t (*maybeVfork)();
/* User interruption. */