创建守护进程
来源:互联网 发布:海淘网站哪个好 知乎 编辑:程序博客网 时间:2024/05/16 15:52
创建方法:1.创建子进程,杀死父进程2.建立新的会话3.设立当前目录为根文件目录4.重设文件掩码5.关闭不需要的文件描述符
题目:写一个程序,有守护模式和常规模式,写一个日志文件,每隔一秒向文件中写入当前日期时间
运行时:./a.out 1(daemon mode ) /log
运行效果:
#include<stdio.h>#include<stdlib.h>#include <unistd.h>#include <time.h>int deamon_mode(){pid_t pid;int fd_maxsize,fd;if((pid = fork()) < 0){fprintf(stderr,"fail to fork \n");exit(EXIT_FAILURE);}if(pid > 0){exit(EXIT_SUCCESS);}setsid(); //创建新的会话chdir("/");//设置工作目录为根目录umask(0);//设置文件权限掩码fd_maxsize = gettablesize();for(fd = 0 ; fd < fd_maxsize; fd++){close(fd); //关闭不需要的文件描述符}return 0;}int get_line(FILE *fp){int line = 0;char buf[1024];while(fgets(buf,sizeof(buf),fp) != NULL){line ++;}return line;}int do_log(const char *filename){FILE *fp = NULL;int line;time_t tm;struct tm *ptm;if((fp = fopen(filename,"a+")) == NULL){fprintf(stderr,"fail to fopen %s\n",filename);exit(EXIT_FAILURE);}line = get_line(fp); //获取当前文件有多少行while(1){tm = time(NULL);ptm = localtime(&tm);fprintf(fp,"%d %d-%d-%d %d:%d:%d \n ",line++,ptm->tm_year,ptm->tm_mon,ptm->tm_mday,ptm->tm_hour,ptm->tm_min,ptm->tm_sec);fflush(fp); //刷新缓存sleep(1);}return 0;}int main(int argc, const char *argv[]){int deamon;if(argc < 3){fprintf(stderr,"Usage : %s mode filename\n",argv[0]);exit(EXIT_FAILURE);}deamon = atoi(argv[1]);if(deamon){deamon_mode();}do_log(argv[2]);return 0;}
- 创建守护进程步骤
- 守护进程 创建 详解
- python 创建守护进程
- 如何创建守护进程
- 守护进程的创建
- 如何创建守护进程
- 创建守护进程
- 守护进程创建步骤
- golang 创建守护进程
- linux创建守护进程
- 创建守护进程 daemon
- 创建守护进程
- 创建守护进程
- Linux 守护进程创建
- 创建守护进程
- 创建守护进程
- Linux创建守护进程
- 守护进程创建步骤
- 第十次上机
- Ubuntu12.04修改环境变量
- UML之六——部署图(Deployment Diagram)
- 【读书笔记】《未来闪影》罗伯特·J·索耶
- 数据类型对应字节数(32位,64位 int 占字节数)
- 创建守护进程
- android开发中animation详解,rotate,translate,alpha属性分析
- python中使用ctypes调用MinGW生成的动态链接库(dll)
- ExpandableListView 改变属性
- 安卓手机的广播事件
- 动态规划算法
- win32 play flash file
- /etc/init.d/functions详解(转载)
- hibernate学习笔记(map映射)