deamon.c

来自「Linux下的守护进程实例」· C语言 代码 · 共 88 行

C
88
字号
/**守护进程实例包括两部分:主函数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 + =
减小字号Ctrl + -
显示快捷键?