diff --git a/lib/base/process.cpp b/lib/base/process.cpp index 03d217ce8..94ee94d95 100644 --- a/lib/base/process.cpp +++ b/lib/base/process.cpp @@ -34,6 +34,7 @@ #ifndef _WIN32 # include <execvpe.h> # include <poll.h> +# include <string.h> # ifndef __APPLE__ extern char **environ; @@ -209,10 +210,12 @@ static Value ProcessKillImpl(struct msghdr *msgh, const Dictionary::Ptr& request pid_t pid = request->Get("pid"); int signum = request->Get("signum"); - int rc = kill(pid, signum); + errno = 0; + kill(pid, signum); + int error = errno; Dictionary::Ptr response = new Dictionary(); - response->Set("rc", rc); + response->Set("errno", error); return response; } @@ -452,7 +455,7 @@ send_message: String jresponse = String(buf, buf + rc); Dictionary::Ptr response = JsonDecode(jresponse); - return response->Get("rc"); + return response->Get("errno"); } static int ProcessWaitPID(pid_t pid, int *status) @@ -1020,7 +1023,11 @@ bool Process::DoEvents(void) #ifdef _WIN32 TerminateProcess(m_Process, 1); #else /* _WIN32 */ - ProcessKill(-m_Process, SIGKILL); + int error = ProcessKill(-m_Process, SIGKILL); + if (error) + Log(LogWarning, "Process") + << "Couldn't kill the process group " << m_PID << " (" << PrettyPrintArguments(m_Arguments) + << "): [errno " << error << "] " << strerror(error); #endif /* _WIN32 */ is_timeout = true;