diff options
author | Marius Bakke <marius@gnu.org> | 2020-05-26 22:30:51 +0200 |
---|---|---|
committer | Marius Bakke <marius@gnu.org> | 2020-05-26 22:30:51 +0200 |
commit | 9edb3f66fd807b096b48283debdcddccfea34bad (patch) | |
tree | cfd86f44ad51df4341a0d48cf4978117e11d7f59 /nix/libutil/util.cc | |
parent | e5f95fd897ad32c93bb48ceae30021976a917979 (diff) | |
parent | b6d18fbdf6ab4a8821a58aa16587676e835001f2 (diff) | |
download | guix-9edb3f66fd807b096b48283debdcddccfea34bad.tar guix-9edb3f66fd807b096b48283debdcddccfea34bad.tar.gz |
Merge branch 'master' into staging
Diffstat (limited to 'nix/libutil/util.cc')
-rw-r--r-- | nix/libutil/util.cc | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/nix/libutil/util.cc b/nix/libutil/util.cc index fb2dfad1f7..17d145b4c6 100644 --- a/nix/libutil/util.cc +++ b/nix/libutil/util.cc @@ -861,6 +861,10 @@ void killUser(uid_t uid) which means "follow POSIX", which we don't want here */ if (syscall(SYS_kill, -1, SIGKILL, false) == 0) break; +#elif __GNU__ + /* Killing all a user's processes using PID=-1 does currently + not work on the Hurd. */ + if (kill(getpid(), SIGKILL) == 0) break; #else if (kill(-1, SIGKILL) == 0) break; #endif @@ -873,6 +877,10 @@ void killUser(uid_t uid) }); int status = pid.wait(true); +#if __GNU__ + /* When the child killed itself, status = SIGKILL. */ + if (status == SIGKILL) return; +#endif if (status != 0) throw Error(format("cannot kill processes for uid `%1%': %2%") % uid % statusToString(status)); |