my_safe_process: try to kill the process softly first
first SIGTERM and if the process didn't die in 10 seconds, SIGKILL it. This allows various tools like `rr`, `gcov`, `gprof`, etc to flush their data to disk properly
This commit is contained in:
parent
9ecdf860ce
commit
122742897b
@ -140,13 +140,20 @@ void handle_core(pid_t pid __attribute__((unused))) {}
|
||||
static int kill_child(bool was_killed)
|
||||
{
|
||||
int status= 0;
|
||||
pid_t ret_pid= 0;
|
||||
|
||||
message("Killing child: %d", child_pid);
|
||||
// Terminate whole process group
|
||||
if (! was_killed)
|
||||
{
|
||||
kill(-child_pid, SIGTERM);
|
||||
sleep(10); // will be interrupted by SIGCHLD
|
||||
if (!(ret_pid= waitpid(child_pid, &status, WNOHANG)))
|
||||
kill(-child_pid, SIGKILL);
|
||||
}
|
||||
|
||||
pid_t ret_pid= waitpid(child_pid, &status, 0);
|
||||
if (!ret_pid)
|
||||
ret_pid= waitpid(child_pid, &status, 0);
|
||||
if (ret_pid == child_pid)
|
||||
{
|
||||
int exit_code= 1;
|
||||
|
Loading…
x
Reference in New Issue
Block a user