⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 deamon.c

📁 Linux下的守护进程实例
💻 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 + -