📄 deamon.c
字号:
/**守护进程实例包括两部分:主函数main()和初始化函数init_deamon()**主函数每隔5秒控制实验板上的led灯。*初始化函数init_deamon()负责生成守护进程。**编译:gcc -g -Wall -o deamon deamon.c*执行:./deamon*查看进程:ps -ef*/#include <sys/types.h>#include <sys/param.h>#include <sys/stat.h>#include <unistd.h>#include <signal.h>#include <stdio.h>#include <stdlib.h>#include <time.h>#define MAXFILE 65535#define LED_ON_ALL 0xF
#define LED_OFF_ALL 0x0void init_deamon();int main(int argc,char *argv[]){ FILE *fp; time_t t; init_deamon(); while(1){ if((fp=fopen("dexinmeng.log","a")) >=0){ t=time(0); fprintf(fp,"Im here at %s\n",asctime(localtime(&t))); fclose(fp); } sleep(5); } return EXIT_SUCCESS;}/**生成守护进程*/void init_deamon(){ int pid; int i; /* 为避免挂起控制终端将Daemon放入后台执行 */ if(pid = fork()) exit(0);//父进程退出,子进程继续 else if(pid < 0) exit(1);//fork失败 //是第一子进程,后台继续执行 //第一子进程成为新的会话组长和进程组长 /* 进程成为新的会话组长和新的进程组长,并与原来的登录会话和进程组脱离,进程同时与控制终端脱离 */ setsid(); if(pid = fork()) exit(0);//结束第一子进程 else if(pid< 0) exit(1);//fork失败,退出 //是第二子进程,继续 //第二子进程不再是会话组长 /* 关闭从父进程那里继承了打开的文件描述符 */ for(i = 0; i < MAXFILE; ++i) close(i); /* 改变当前工作目录 */ chdir("/tmp"); /* 将文件创建掩模清除,防止父进程修改守护进程所创建的文件的存取位 */ umask(0); return;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -