aboutsummaryrefslogtreecommitdiffstats
path: root/common/exechelp.c
diff options
context:
space:
mode:
Diffstat (limited to 'common/exechelp.c')
-rw-r--r--common/exechelp.c25
1 files changed, 25 insertions, 0 deletions
diff --git a/common/exechelp.c b/common/exechelp.c
index 89604902a..4a385bcd7 100644
--- a/common/exechelp.c
+++ b/common/exechelp.c
@@ -1102,3 +1102,28 @@ gnupg_spawn_process_detached (const char *pgmname, const char *argv[],
return 0;
#endif /* !HAVE_W32_SYSTEM*/
}
+
+
+/* Kill a process; that is send an appropriate signal to the process.
+ gnupg_wait_process must be called to actually remove the process
+ from the system. An invalid PID is ignored. */
+void
+gnupg_kill_process (pid_t pid)
+{
+#ifdef HAVE_W32_SYSTEM
+ /* Older versions of libassuan set PID to 0 on Windows to indicate
+ an invalid value. */
+ if (pid != (pid_t) INVALID_HANDLE_VALUE && pid != 0)
+ {
+ HANDLE process = (HANDLE) pid;
+
+ /* Arbitrary error code. */
+ TerminateProcess (process, 1);
+ }
+#else
+ if (pid != (pid_t)(-1))
+ {
+ kill (pid, SIGTERM);
+ }
+#endif
+}