Linux操作系统下守护进程的编程方法(3)

文章作者 100test 发表时间 2007:03:14 16:34:56
来源 100Test.Com百考试题网


三. 守护进程实例

守护进程实例包括两部分:主程序test.c和初始化程序init.c。主程序每隔一分钟向/tmp目录中的日志test.log报告运行状态。初始化程序中的init_daemon函数负责生成守护进程。读者可以利用init_daemon函数生成自己的守护进程。

1. init.c清单

#include < unistd.h > 

#include < signal.h > 

#include < sys/param.h > 

#include < sys/types.h > 

#include < sys/stat.h > 

void init_daemon(void) 

{ 

int pid. 

int i. 

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< NOFILE.  i)//关闭打开的文件描述符 

close(i). 

chdir("/tmp").//改变工作目录到/tmp 

umask(0).//重设文件创建掩模 

return. 

}

2. test.c清单

#include < stdio.h > 

#include < time.h > 



void init_daemon(void).//守护进程初始化函数 



main() 

{ 

FILE *fp. 

time_t t. 

init_daemon().//初始化为Daemon 



while(1)//每隔一分钟向test.log报告运行状态 

{ 

sleep(60).//睡眠一分钟 

if((fp=fopen("test.log","a")) >=0) 

{ 

t=time(0). 

fprintf(fp,"Im here at %sn",asctime(localtime(&.t)) ). 

fclose(fp). 

} 

} 

}

以上程序在RedHat Linux6.0下编译通过。步骤如下:

编译:gcc -g -o test init.c test.c

执行:./test

查看进程:ps -ef

从输出可以发现test守护进程的各种特性满足上面的要求。



相关文章


Linux操作系统下守护进程的编程方法(2)
Linux操作系统下守护进程的编程方法(1)
Linux操作系统下守护进程的编程方法(3)
Linux系统下C开发环境的构成和安装(2)
让Linux懂得为你开门—自动作业控制
Linux系统下C开发环境的构成和安装(1)
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛