【博客180】创建守护进程代码(二)

内容: 记录创建守护进程的代码

代码实现:

#include<stdio.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<time.h>
#include<string.h>
#include<stdlib.h>

int main(void){
    pid_t child;
    time_t rawTime;
    struct tm *timeInfor;
    FILE *pf;
    child = fork();
    
    if(child){    //child大于0,则是父进程逻辑,应该返回
        exit(0);
    }
    
    setsid();     //创建会话
    chdir("/");   //修改目录
    umask(0);     //修改权限
    
    for(int i = 0; i<getdtablesize();i++){
        close(i);
    }
    
    for(int i = 0;i<100;i++){
        pf = fopen("/home/luzejia/test/test.log", "a");
        
        if(pf==NULL){
            printf("can't open the file!");
            return -1;
        }
        
        time(&rawTime);
	    timeInfor = localtime(&rawTime);
        fprintf(pf, "pid = %d,and the time is ", getpid());
        fprintf(pf, "%d%d%d%d%d%d%d%d%d%d%d\n", timeInfor->tm_year + 1900,
                (timeInfor->tm_mon + 1)/10,
                (timeInfor->tm_mon + 1)%10, 
                (timeInfor->tm_mday)/10, 
                (timeInfor->tm_mday) % 10, 
                (timeInfor->tm_hour)/10, 
                (timeInfor->tm_hour)%10, 
                (timeInfor->tm_min)/10, 
                (timeInfor->tm_min)%10, (timeInfor->tm_sec)/10, 
                (timeInfor->tm_sec)%10);
        fclose(pf);
        sleep(1);
    }
    return 0;
}

代码功能:

创建一个守护进程,并且让往日志文件里面写入日期

代码解释:

如何得到文件描述符最大数量?
使用:getdtablesize()函数,这个函数返回进程文件描述符表的项数,也就是最大打开数量

运行结果:

1.可以看到,使用就马上从终端返回了,你可以继续使用终端
在这里插入图片描述
2.关闭原来的终端,打开新终端,查看我们的程序:并没有因为原终端关闭而受影响
在这里插入图片描述
3.查看日志文件:可以看到成功运行并写入了时间戳
在这里插入图片描述

大四学生一枚,如果文章有错误的地方,欢迎在下方提出,每条评论我都会去认真看并回复,同时感谢指正的前辈。有喜欢C/C++,linux的同学欢迎私信一起讨论学习。

发布了214 篇原创文章 · 获赞 41 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/qq_43684922/article/details/104801481