zoukankan      html  css  js  c++  java
  • Linux 守护进程创建

    1. 守护进程:

    是Linux中的后台服务进程。它是一个生存期较长的进程,通常独立于控制终端并且周期性的执行某种
    任务或等待处理某些发生的事件。守护进程常常在系统启动时开始运行,在系统关闭时终止

    2. 创建守护进程的步骤:

      1)创建子进程,父进程退出  fork();

      2)在子进程中创建新会话   setsid();

      3)改变当前目录为根目录  chdir("/");

      4)重设文件权限掩码   umask(0);

      5)关闭文件描述符  close(fd);

    补充:
    getdtablesize();  //进程所能打开的最大文件数
    daemon.log: 包含各种系统后台守护进程日志信息。
    tmp文件是linux运行时产生的缓存文件,用于加速二次打开文件的速度,
    tmp文件在 linux关机时会被系统预设指令删除的。

    例子: 通过创建守护进程,一直向  "/tmp/daemon.log"  文件中写入数据

    #include <stdio.h>
    #include <stdlib.h>
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <fcntl.h>
    
    int main(int argc, const char *argv[])
    {
        pid_t pid;
        pid = fork();
        if(pid < 0)
        {
            perror("fork fail: ");
            exit(1);
        }
        else if(pid == 0)  //子进程
        {
            setsid();//在子进程中创建新会话
            chdir("/");//改变目录为根目录
            umask(0);// 重设文件权限掩码
            int fd = getdtablesize();//获取最大文件描述符
            int i;
            for(i=0; i<fd ;i++) //关闭文件,文件描述符是按照顺序,循序打开的,所以获取最大的文件描述符,即为打开多少个文件
            {
                close(i); //关闭所有打开的文件,包括标准输入,输出,错误
            }
            fd = open("/tmp/daemon.log",
                    O_WRONLY|O_CREAT|O_APPEND,0777);  //打开日志文件,循环向日志文件写入内容
            while(1)
            {
                write(fd, "hello
    ",6);
                sleep(1);
            }
        }
        else //创建子进程后父进程退出
        {
            exit(1);
        }
        return 0;
    }

    测试:

  • 相关阅读:
    8.10日报
    8.9日报
    8.8日报
    8.7日报
    《大道至简》读后感
    8.6日报
    8.5日报
    8.4日报
    8.3日报
    8.2日报
  • 原文地址:https://www.cnblogs.com/electronic/p/10932457.html
Copyright © 2011-2022 走看看