标签归档:daemon

一个服务程序的启动和关闭

服务程序又被称为daemon程序,运行过程中可能随时fork子进程。
启动的方法,直接运行就可以了。

在程序的运行过程中,可以将当前进程和其fork子进程的PID,写到一个PID文件中。

然后关闭的时候,可以用shell脚本来关闭。

kill -HUP `cat /pid/file/path`

一个简单的daemon程序

daemon程序称之为系统的服务程序,apache,mysql等都是这类的程序,在后台运行,旨在提供一种服务。这种进程已经拜托掉普通进程那种前端的控制运行在后端。
实现的基本思路如下:首先启动一个外壳进程,他存在的意义,只是提供一个起飞的地方,然后fork出来一个子进程,在子进程代码中,调用setsid拜托父进程的控制,
然后更改一些基本属性,关闭一些打开的文件,然后启动一个死循环,来执行真正要执行的任务。简单的一个代码如下,简单期间,任务函数run中,没有任何代码。

/* daemon.c */
#include <stdio.h>
#include <stdlib.h>
#include<unistd.h>
#include<sys/types.h>
#include <sys/stat.h>
#define MAXFILE 65535

void run();

int main()
{
	pid_t pid;
	int i;
        pid=fork();
	if(pid<0){
		printf("error in fork\n");
		exit(1);
	}else if(pid>0) 
		exit(0); 
        setsid();
        chdir("/");
	umask(0);
	for(i=0;i<MAXFILE;i++)
		close(i);
	for(;;){
	   run();
  	   sleep(1);
        }
}

void run() {

}