守护进程的实现

来源:互联网 发布:韦德体测数据 编辑:程序博客网 时间:2024/05/15 12:15
#include <stdio.h>#include <sys/types.h>#include <sys/stat.h>#include <unistd.h>#include <fcntl.h>#include <stdlib.h>int daemonize(int nochdir, int noclose){// 1、创建子进程,关闭父进程pid_t pid = fork();if (pid > 0){exit(0);}else if (pid < 0){return -1;}// 2、设置文件的掩码, mode & ~umaskumask(0);// 3、设置新的会话: 脱离当前会话和终端的控制if (setsid() < 0){return -1;}if (nochdir == 0 ){// 4、改变当前的工作目录if (chdir("/") < 0){return -1;    }}// 标准输入、关闭标准输出、标准错误close(STDIN_FILENO);close(STDOUT_FILENO);close(STDERR_FILENO);if (noclose == 0){// 重定向标准输入、关闭标准输出、标准错误open("/dev/null", O_RDONLY);   // 0 open("/dev/null", O_RDWR);   // 1open("/dev/null", O_RDWR);   // 2}return 0;}int main(){// daemonize(0,0);daemon(0,0);while (1);return 0;} 

原创粉丝点击