diff --git a/gck-rpc-daemon-standalone.c b/gck-rpc-daemon-standalone.c
index 6aff4d34a4f0dc0ffd9f0624c4ed7e3c17291c6a..563f83f5f34d9f8a2da5cd80742e239d97cf2a52 100644
--- a/gck-rpc-daemon-standalone.c
+++ b/gck-rpc-daemon-standalone.c
@@ -32,6 +32,7 @@
 #include <unistd.h>
 #include <stdlib.h>
 #include <string.h>
+#include <signal.h>
 
 #include <dlfcn.h>
 #include <pthread.h>
@@ -111,6 +112,7 @@ static int install_syscall_filter(void)
 		ALLOW_SYSCALL(set_robust_list),
 		ALLOW_SYSCALL(recvfrom),
 		ALLOW_SYSCALL(madvise),
+		ALLOW_SYSCALL(rt_sigaction),
 		KILL_PROCESS,
 	};
 	struct sock_fprog prog = {
@@ -154,6 +156,11 @@ static int usage(void)
 	exit(2);
 }
 
+void termination_handler (int signum)
+{
+	is_running = 0;
+}
+
 int main(int argc, char *argv[])
 {
 	CK_C_GetFunctionList func_get_list;
@@ -225,6 +232,10 @@ int main(int argc, char *argv[])
 	   if (sock == -1)
 		   exit(1);
 
+	/* Shut down gracefully on SIGTERM. */
+	if (signal (SIGTERM, termination_handler) == SIG_IGN)
+		signal (SIGTERM, SIG_IGN);
+
 	   is_running = 1;
 	   while (is_running) {
 		FD_ZERO(&read_fds);