aboutsummaryrefslogtreecommitdiff
path: root/src/libutil/util.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/libutil/util.cc')
-rw-r--r--src/libutil/util.cc14
1 files changed, 11 insertions, 3 deletions
diff --git a/src/libutil/util.cc b/src/libutil/util.cc
index 7e5d8bb80..bb59b0924 100644
--- a/src/libutil/util.cc
+++ b/src/libutil/util.cc
@@ -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
+
+
//////////////////////////////////////////////////////////////////////