MDEV-7659 buildbot may leave stale mysqld
safe_process puts its children (mysqld, in this case) into a separate process group, to be able to kill it all at once. buildslave kills mtr's process group when it loses connection to the master. result? buildslave kills mtr and safe_process, but leaves stale mysqld processes in their own process groups. fix: put safe_process itself into a separate process group, then buildslave won't kill it and safe_process will kill mysqld'd and itself when it will notice that the parent mtr no longer exists.
This commit is contained in:
parent
206b111b11
commit
12d87c3ba5
@ -125,7 +125,7 @@ extern "C" void handle_abort(int sig)
|
|||||||
message("Got signal %d, child_pid: %d, sending ABRT", sig, child_pid);
|
message("Got signal %d, child_pid: %d, sending ABRT", sig, child_pid);
|
||||||
|
|
||||||
if (child_pid > 0) {
|
if (child_pid > 0) {
|
||||||
kill (-child_pid, SIGABRT); // Don't wait for it to terminate
|
kill(-child_pid, SIGABRT); // Don't wait for it to terminate
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -226,6 +226,18 @@ int main(int argc, char* const argv[] )
|
|||||||
sleep(1);
|
sleep(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
Child: Make this process it's own process group to be able to kill
|
||||||
|
it and any its children that hasn't changed a group themselves)
|
||||||
|
|
||||||
|
Parent: Detach from the parent's process group, so that killing a parent
|
||||||
|
group wouldn't kill us (if we're killed, there's no one to kill our child
|
||||||
|
processes that run in their own process group). There's a loop below
|
||||||
|
that monitors the parent, it's enough.
|
||||||
|
*/
|
||||||
|
setpgid(0, 0);
|
||||||
|
|
||||||
|
|
||||||
if (child_pid == 0)
|
if (child_pid == 0)
|
||||||
{
|
{
|
||||||
close(pfd[0]); // Close unused read end
|
close(pfd[0]); // Close unused read end
|
||||||
@ -236,10 +248,6 @@ int main(int argc, char* const argv[] )
|
|||||||
signal(SIGHUP, SIG_DFL);
|
signal(SIGHUP, SIG_DFL);
|
||||||
signal(SIGCHLD, SIG_DFL);
|
signal(SIGCHLD, SIG_DFL);
|
||||||
|
|
||||||
// Make this process it's own process group to be able to kill
|
|
||||||
// it and any childs(that hasn't changed group themself)
|
|
||||||
setpgid(0, 0);
|
|
||||||
|
|
||||||
if (nocore)
|
if (nocore)
|
||||||
{
|
{
|
||||||
struct rlimit corelim = { 0, 0 };
|
struct rlimit corelim = { 0, 0 };
|
||||||
|
Loading…
x
Reference in New Issue
Block a user