mirror of
https://github.com/NixOS/nix
synced 2025-06-27 04:21:16 +02:00
* Terminate build hooks and substitutes with a TERM signal, not a KILL
signal. This is necessary because those processes may have joined the BDB environment, so they have to be given a chance to clean up. (NIX-85)
This commit is contained in:
parent
b2b6cf3fc8
commit
8ab229ddf2
3 changed files with 27 additions and 10 deletions
|
@ -641,6 +641,7 @@ Pid::Pid()
|
|||
{
|
||||
pid = -1;
|
||||
separatePG = false;
|
||||
killSignal = SIGKILL;
|
||||
}
|
||||
|
||||
|
||||
|
@ -654,6 +655,7 @@ void Pid::operator =(pid_t pid)
|
|||
{
|
||||
if (this->pid != pid) kill();
|
||||
this->pid = pid;
|
||||
killSignal = SIGKILL; // reset signal to default
|
||||
}
|
||||
|
||||
|
||||
|
@ -669,10 +671,10 @@ void Pid::kill()
|
|||
|
||||
printMsg(lvlError, format("killing process %1%") % pid);
|
||||
|
||||
/* Send a KILL signal to the child. If it has its own process
|
||||
group, send the signal to every process in the child process
|
||||
group (which hopefully includes *all* its children). */
|
||||
if (::kill(separatePG ? -pid : pid, SIGKILL) != 0)
|
||||
/* Send the requested signal to the child. If it has its own
|
||||
process group, send the signal to every process in the child
|
||||
process group (which hopefully includes *all* its children). */
|
||||
if (::kill(separatePG ? -pid : pid, killSignal) != 0)
|
||||
printMsg(lvlError, (SysError(format("killing process %1%") % pid).msg()));
|
||||
|
||||
/* Wait until the child dies, disregarding the exit status. */
|
||||
|
@ -710,6 +712,12 @@ void Pid::setSeparatePG(bool separatePG)
|
|||
}
|
||||
|
||||
|
||||
void Pid::setKillSignal(int signal)
|
||||
{
|
||||
this->killSignal = signal;
|
||||
}
|
||||
|
||||
|
||||
void killUser(uid_t uid)
|
||||
{
|
||||
debug(format("killing all processes running under uid `%1%'") % uid);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue