summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatt Stancliff <matt@genges.com>2014-03-26 22:15:44 -0400
committerantirez <antirez@gmail.com>2014-08-07 16:21:15 +0200
commitd99a7246f805f20a99bd2fa428c10a64433e6e81 (patch)
treed01ee3beea3f10eb240243760f0ad6c517f6b1b8
parentc82e0b701f86989711988dae8be97bdbe63395ba (diff)
downloadredis-d99a7246f805f20a99bd2fa428c10a64433e6e81.tar.gz
Add graceful exit when Ctrl-C is received
-rw-r--r--src/redis.c22
1 files changed, 17 insertions, 5 deletions
diff --git a/src/redis.c b/src/redis.c
index 5ddbc9250..faed67331 100644
--- a/src/redis.c
+++ b/src/redis.c
@@ -3399,10 +3399,21 @@ void redisAsciiArt(void) {
zfree(buf);
}
-static void sigtermHandler(int sig) {
- REDIS_NOTUSED(sig);
-
- redisLogFromHandler(REDIS_WARNING,"Received SIGTERM, scheduling shutdown...");
+static void sigShutdownHandler(int sig) {
+ char *msg;
+
+ switch (sig) {
+ case SIGINT:
+ msg = "Received SIGINT scheduling shutdown...";
+ break;
+ case SIGTERM:
+ msg = "Received SIGTERM scheduling shutdown...";
+ break;
+ default:
+ msg = "Received shutdown signal, scheduling shutdown...";
+ };
+
+ redisLogFromHandler(REDIS_WARNING, msg);
server.shutdown_asap = 1;
}
@@ -3413,8 +3424,9 @@ void setupSignalHandlers(void) {
* Otherwise, sa_handler is used. */
sigemptyset(&act.sa_mask);
act.sa_flags = 0;
- act.sa_handler = sigtermHandler;
+ act.sa_handler = sigShutdownHandler;
sigaction(SIGTERM, &act, NULL);
+ signal(SIGINT, sigShutdownHandler);
#ifdef HAVE_BACKTRACE
sigemptyset(&act.sa_mask);