首页 > 学院 > 开发设计 > 正文

Linux--守护进程

2019-11-06 06:13:13
字体:
来源:转载
供稿:网友

以下例子是创建一个守护进程,间隔5s在/tmp目录下写文件

#include <stdio.h>#include <unistd.h>#include <stdlib.h>#include <fcntl.h>#include <sys/time.h>#include <sys/resource.h>#include <string.h>#include <time.h>void daemonize(){	//1. 创建一个子进程,父进程退出,主要就是为setsid做准备	pid_t pid;	pid = fork();	if (pid < 0)	{		PRintf("fork error/n");		return ;	}	else if (pid > 0)	{		exit(0);	}		//2. 调用setsid创建新会话, 如果不创建新会话的话。原来依附在父进程的会话是终端bash创建的,	//这样在关闭那个终端sh后, 整个会话就会退出	setsid();		//3. 改变当前目录, 只要任意可以随意访问的目录,因为不同的目录挂载有可能	//挂载在不同的文件系统上,为了保证守护进程开机启动不依赖对应的文件系统,	//默认将它改变到/目录上	if (chdir("/") < 0)	{		printf("change dir to '/' error/n");		return;	}		//4. 设置文件掩码, 以免在守护进程运行过程中新创建的文件不适合对应权限	umask(0);		//5. 关闭对应的文件描述符	struct rlimit rlim;	if (getrlimit(RLIMIT_NOFILE, &rlim) < 0)	{		perror("getrlimit");		return ;	}		int i = 0;	for (; i < rlim.rlim_cur; ++i)	{		close(i);	}		//6. 工作代码	int fd = open("/tmp/test.log", O_CREAT | O_RDWR | O_APPEND, 0644);	while(1)	{		//char *ctime(const time_t *timep);		time_t tt = time(NULL);		char *ts = ctime(&tt); 				write(fd, ts, strlen(ts));				sleep(5);	}	close(fd);}int main(int argc, char **argv){	daemonize();		return 0;}


上一篇:Eclipse使用教程

下一篇:17-02-28

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表