Linux中国 Linux中国门户站!
设为主页 设为主页
收藏本站 收藏本站
 
当前位置 :首页 ->Linux技术 ->Linux程序设计 ->正文

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

来源: 作者: 时间:2007-04-11 点击: [收藏] [投稿]








三. 守护进程实例

守护进程实例包括两部分:主程序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操作系统套接字编程的5个隐患   下一篇:Linux操作系统中用PHP构建网站详解

文章评论】 【收藏本文】 【推荐好友】 【打印本文】 【我要投稿】 【论坛讨论
更多相关文章
Power by linux-cn.com 粤ICP备05006655号