From 782810a8bf1fbc3feaca851a011a8124891d39fc Mon Sep 17 00:00:00 2001 From: George Kadianakis Date: Sun, 11 Sep 2011 20:26:01 +0200 Subject: [PATCH] Introduce tor_terminate_process() function. --- src/common/util.c | 26 ++++++++++++++++++++++++++ src/common/util.h | 1 + 2 files changed, 27 insertions(+) diff --git a/src/common/util.c b/src/common/util.c index 0632c674e9..63172c36a3 100644 --- a/src/common/util.c +++ b/src/common/util.c @@ -28,6 +28,7 @@ #include #include #include +#include #else #include #include @@ -43,6 +44,7 @@ #include #include #include +#include #ifdef HAVE_NETINET_IN_H #include @@ -2930,6 +2932,30 @@ format_helper_exit_status(unsigned char child_state, int saved_errno, /* Maximum number of file descriptors, if we cannot get it via sysconf() */ #define DEFAULT_MAX_FD 256 +/** Terminate process running at PID pid. + * Code borrowed from Python's os.kill. */ +int +tor_terminate_process(pid_t pid) +{ +#ifdef MS_WINDOWS + DWORD pid_win = pid; + DWORD err; + HANDLE handle; + /* If the signal is outside of what GenerateConsoleCtrlEvent can use, + attempt to open and terminate the process. */ + handle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid); + if (handle == NULL) + return -1; + + if (TerminateProcess(handle, sig) == 0) + return -1; + else + return 0; +#else /* *nix */ + return kill(pid, SIGTERM); +#endif +} + #define CHILD_STATE_INIT 0 #define CHILD_STATE_PIPE 1 #define CHILD_STATE_MAXFD 2 diff --git a/src/common/util.h b/src/common/util.h index 8bf4f7b137..7e889b10c7 100644 --- a/src/common/util.h +++ b/src/common/util.h @@ -350,6 +350,7 @@ void write_pidfile(char *filename); void tor_check_port_forwarding(const char *filename, int dir_port, int or_port, time_t now); +int tor_terminate_process(pid_t pid); int tor_spawn_background(const char *const filename, int *stdout_read, int *stderr_read, const char **argv, const char **envp); -- 2.47.3