Linux下的守护进程实例

源代码在线查看: deamon.c

软件大小: 2 K
上传用户: horse2000
关键词: Linux 进程
下载地址: 免注册下载 普通下载 VIP

相关代码

				/*				*守护进程实例包括两部分:主函数main()和初始化函数init_deamon()				*				*主函数每隔5秒控制实验板上的led灯。				*初始化函数init_deamon()负责生成守护进程。				*				*编译:gcc -g -Wall -o deamon deamon.c				*执行:./deamon				*查看进程:ps -ef				*/								#include 				#include 				#include 				#include 				#include 				#include 				#include 				#include 								#define MAXFILE 65535								#define LED_ON_ALL	0xF
				#define LED_OFF_ALL	0x0								void 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;				}							

相关资源