Redis daemon:即在后台运行,源码如下
int background = server.daemonize && !server.supervised;
if (background) daemonize(); /* 如果配置后台运行,则启用fork,默认前台运行 */
void daemonize(void) {
int fd;
if (fork() != 0) exit(0); /* parent exits */
setsid(); /* create a new session */
/* Every output goes to /dev/null. If Redis is daemonized but
* the 'logfile' is set to 'stdout' in the configuration file
* it will not log at all. */
if ((fd = open("/dev/null", O_RDWR, 0)) != -1) {
dup2(fd, STDIN_FILENO);
dup2(fd, STDOUT_FILENO);
dup2(fd, STDERR_FILENO);
if (fd > STDERR_FILENO) close(fd);
}
}
这很好理解,比如配置daemonize = no
控制台启动redis-server
daemonize = yes