diff options
author | Matt Stancliff <matt@genges.com> | 2014-03-26 22:15:44 -0400 |
---|---|---|
committer | antirez <antirez@gmail.com> | 2014-08-07 16:21:15 +0200 |
commit | d99a7246f805f20a99bd2fa428c10a64433e6e81 (patch) | |
tree | d01ee3beea3f10eb240243760f0ad6c517f6b1b8 | |
parent | c82e0b701f86989711988dae8be97bdbe63395ba (diff) | |
download | redis-d99a7246f805f20a99bd2fa428c10a64433e6e81.tar.gz |
Add graceful exit when Ctrl-C is received
-rw-r--r-- | src/redis.c | 22 |
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); |