内容: 记录创建守护进程的代码
代码实现:
#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的同学欢迎私信一起讨论学习。