从时间进程日志上面了解守护进程daemon的使用

说起进程呢? 在俺心中永远有种高大上的感觉,哈哈,自从了解到了进程方面的东西,也觉得进程这个执行过程真的很神奇,但是在了解到了还有守护进程方面的东东的时候又觉得貌似更加的让俺魂不守舍啦!觉得自己可以做到  觉得从一名屌丝立马逆袭成了高大上啦。O(∩_∩)O哈哈~

那么,进程守护具体是什么呢?相信看这篇文章的牛牛们都对这方面有一定的了解啦。所以就带着复习或者巩固或者挑刺的心理来看看吧。

上面就是大致的创建守护进程的步骤啦,用语言来描述的话,共需要5步即可建立一个守护进程:

1》用fork()函数创建子进程,关闭父进程。

2》在子进程中用setsid()函数建立新的会话。

3》改变进程的工作目录,用chdir。

4》重设文件掩码umask为0。

5》关闭不需要的文件描述符。

以上就是建立守护进程的五个大的步骤啦,在创建守护进程的过程中我们需要注意以下几个问题。

在使用setsid()函数建立新的会话的时候,我们的调用者不能是我们的组长进程,通常的情况下我们的组长进程就是我们的父进程。

好了,大致的思想了解之后,接下来的事情就简单的多了,无非就是代码的实现的问题了;

闲言碎语不要讲,直接上代码:

#include <head.h>

#define daemo_mode 0
#define nomal_mode 1

int  daemo() //5步创建守护进程
{
	pid_t pid;
	pid = fork();
	if(pid < 0)
	{
		fprintf(stderr,"File to fork\n",strerror(errno));
		exit(EXIT_FAILURE);
	}
	if(pid > 0)
		exit(EXIT_FAILURE);

	if(setsid() < 0)
	{
		perror("File to setsid");
		exit(EXIT_FAILURE);
	}
	chdir("/");
	umask(0);
	close(0);
	close(1);
	close(2);
	return 0;
}

int get_line(FILE *fp)
{
	int line;
	char *tmp;
	char buf[4096];
	while(1)
	{
		tmp = fgets(buf,sizeof(buf),fp);
		if(tmp == NULL)
			break;
		if(buf[strlen(tmp) - 1] == '\n')
			line++;
	}
	return line;
}

int do_nomal(const char *filename)
{
	FILE * fp;
	time_t t;
	struct tm *ptm;
	int line = 0;

	fp = fopen(filename,"a+");

	if(fp == NULL)
	{
		fprintf(stderr,"File to fopen\n",strerror(errno));
		exit(EXIT_FAILURE);
	}

	line = get_line(fp);

	while(1)
	{
		++line;
		time(&t); //The realization of time
		ptm = localtime(&t);

		sleep(1);
		fflush(fp);
		fprintf(fp,"%d-%d-%d",(1900+ptm->tm_year),(1+ptm->tm_mon),ptm->tm_mday);
		fprintf(fp,"%d:%d:%d\n",ptm->tm_hour,ptm->tm_min,ptm->tm_sec);
	}
	return 0;
}
// ./a.out log 0/1
int main(int argc, const char *argv[])
{
	if(argc < 3)
	{
		fprintf(stderr,"Usage : %s argv[1] argv[2]\n",argv[0]);
		exit(EXIT_FAILURE);
	}
	int mode = atoi(argv[2]);
	switch(mode)
	{
	case daemo_mode:
		daemo();
		break;
	case nomal_mode:
		break;
	default:
		printf("Unknow mode \n");
		goto next;
	}
	do_nomal(argv[1]);

next:
	return 0;
}

从时间进程日志上面了解守护进程daemon的使用

时间: 2024-10-12 08:28:14

从时间进程日志上面了解守护进程daemon的使用的相关文章

Linux 守护进程二(激活守护进程)

//守护进程--读文件 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <errno.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <signal.h> #includ

小何讲进程: 编写Linux守护进程方法详解

守护进程概述 守护进程,也就是通常所说的Daemon进程,是Linux中的后台服务进程. 它是一个生存期较长的进程,通常独立于控制终端并且周期性地执行某种任务或等待处理某些事件的发生. 守护进程常常在系统引导载入时启动,在系统关闭时终止. Linux有很多系统服务,大多数服务都是通过守护进程实现的.守护进程的名字通常以d结尾,字母d就是Daemon的意思. 由于在Linux中,每一个系统与用户进行交流的界面称为终端,每一个从此终端开始运行的进程都会依附于这个终端,这个终端就称为这些进程的控制终端

[linux]进程(六)——守护进程

15,守护进程 概念:守护进程(Daemon)是运行在后台的一种特殊进程.它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件.守护进程的特点:守护进程必须与其运行前的环境隔离开来.这些环境包括未关闭的文件描述符,控制终端,会话和进程组,工作目录以及文件创建掩模等.这些环境通常是守护进程从执行它的父进程(特别是shell)中继承下来的.守护进程的编程要点:(1)后台运行 方法是父进程fork()出子进程后,父进程九退出 if(pid=fork())  exit(0);//是父进程,结

一、进程与信号的守护进程与孤儿进程

终结父进程,子进程变孤儿进程,孤儿进程会被init进程领养 #include <unistd.h> #include <string.h> #include <stdlib.h> #include <stdio.h> int main() { pid_t pid=fork(); if(pid<0) { printf("fork error"); exit(1); } else if(pid >0) { //父进程先打印父进程,

探究守护进程及其错误日志处理

守护进程也是通常所说的deamon进程,他是linux中的后台服务进程.它是一个生存期较长的进程,通常独立于控制终端并且周期性的执行某种任务,或者等待处理某些发生的事件 编写守护进程的步骤: 1.创建子进程,父进程退出. 这儿有一个问题,由于父进程先于子进程退出,会造成子进程没有父进程,从而变成一个孤儿进程,在linux中,每当系统发现一个孤儿进程,就会自动由1号进程(init进程)收养,这样原来的子进程就变成init进程的子进程了 其实现代码如下: pid=fork(); if(pid>0)

Linux中的两种守护进程stand alone和xinetd

--http://www.cnblogs.com/itech/archive/2010/12/27/1914846.html#top 一般使用stand alone /etc/init.d/ 非常少用xinetd /etc/xinetd.d/ Linux守护进程的运行方式 1.独立运行(stand-alone)的守护进程 独立运行的守护进程由init脚本负责管理,所有独立运行的守护进程的脚本在/etc/rc.d/init.d/目录下.系统服务都是独立运行的守护进程,包括syslogd和cron等

《Unix环境高级编程》读书笔记 第13章-守护进程

1. 引言 守护进程是生存期长的一种进程.它们常常在系统引导装入时启动,仅在系统关闭时才终止.它们没有控制终端,在后台运行. 本章说明守护进程结构.如何编写守护进程程序.守护进程如何报告出错情况. 2. 守护进程的特征 基于BSD的系统下执行:ps -axj -a 显示由其他用户所拥有的进程的状态:-x 显示没有控制终端的进程状态:-j 显示与作业有关的信息 基于System V的系统下执行:ps -efj Linux下执行以上两个命令输出一致 常见的守护进程: kswapd,内存换页守护进程.

Gradle 1.12翻译——第十九章. Gradle 守护进程

有关其他已翻译的章节请关注Github上的项目:https://github.com/msdx/gradledoc/tree/1.12,或访问:http://gradledoc.qiniudn.com/1.12/userguide/userguide.html 本文原创,转载请注明出处:http://blog.csdn.net/maosidiaoxian/article/details/41343615 关于我对Gradle的翻译,以Github上的项目及http://gradledoc.qin

Linux守护进程详解(init.d和xinetd)

一 Linux守护进程 Linux 服务器在启动时需要启动很多系统服务,它们向本地和网络用户提供了Linux的系统功能接口,直接面向应用程序和用户.提供这些服务的程序是由运行在后台的守护进程来执行的.守护进程是生存期长的一种进程.它们独立于控制终端并且周期性的执行某种任务或等待处理某些发生的事件.他们常常在系统引导装入时启动,在系统关闭时终止.linux系统有很多守护进程,大多数服务器都是用守护进程实现的.同时,守护进程完成许多系统任务,比如,作 业规划进程crond.打印进程lqd等.有些书籍