跳转至内容
  • 社区首页
  • 版块
  • 最新
  • 标签
  • 热门
折叠

GitHub中文论坛

OAHINTTO

OAHINTT

@OAHINTT
关于
帖子
1
主题
1
分享
0
群组
0
粉丝
0
关注
0

帖子

最新 最佳 有争议的

  • 创建守护进程
    OAHINTTO OAHINTT

    守护进程:系统一开启就默默在后台执行,结束关闭。

    1.创建子进程,父进程退出。//fork()&exit()
    2.在子进程中创建新会话。//setsid()
    3.将当前目录改为根目录or\tmp。 //chdir("\tmp")
    4.重设权限掩码。//umask(0)
    5.关闭文件描述符。//getdtablesize():系统能最大打开文件描述符个数

    #include <stdio.h>
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <unistd.h>
    #include <stdlib.h>
    
    void mydaemon();
    int main(int argc, char *argv[])
    { 
        mydeamon();
        //守护进程实现功能:在后台每隔1s往1.txt里写入hello,要换行
        FILE *fp = fopen("1.txt","a+");
        if(NULL == fp)
        {
            perror("fopen");
            return -1;
        }
        while(1)
        {
            sleep(1);
            fprintf(fp,"%s\n","hello");
            fflush(fp);//标准IO的buffer缓冲机制
        }
        return 0;
    }
    
    //创建守护进程
    void mydaemon()
    {
        pid_t pid = fork();//创建子进程
        if(pid < 0)
        {
            perror("fork");
            exit(-1);
        }else if(pid == 0)
        {
            if(-1 == setsid())//创建新会话
            {
                perror("setsid");
                exit(-1);
            }
            if(-1 == chdir("/tmp"))//改变当前目录为/tmp
            {
                perror("chdir");
                exit(-1);
            }
            umask(0);//重设权限掩码
            for(int i = 0;i < getdtablesize();i++)//关闭所有文件描述符
            {
                close(i);
            }
        }else{
            exit(0);//父进程退出
        }
    }
    Github & Git
  • 登录

  • 第一个帖子
    最后一个帖子
0
  • 社区首页
  • 版块
  • 最新
  • 标签
  • 热门