linux--守护进程
来源:互联网 发布:嵌入式linux如何移植 编辑:程序博客网 时间:2024/06/06 11:37
守护进程(Daemon)是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。守护进程是一种很有用的进程。 Linux的大多数服务器就是用守护进程实现的。比如,Internet服务器inetd,Web服务器httpd等。同时,守护进程完成许多系统任务。
基本概念
进程
当子进程终止时,父进程会得到通知并能取得子进程的退出状态。
进程组
对话期
如果调用setsid的进程不是一个进程组的组长,此函数创建一个新的会话期。
如果调用的进程是一个进程组的组长,此函数返回错误。
子进程继承了父进程的进程组ID,但是进程PID却是新分配的,所以不可能是新会话的进程组的PID。
一、守护进程及其特性
总之,除开这些特殊性以外,守护进程与普通进程基本上没有什么区别。
因此,编写守护进程实际上是把一个普通进程按照上述的守护进程的特性改造成为守护进程。
二、守护进程的编程要点
1. 在后台运行
为避免挂起控制终端将Daemon放入后台执行。方法是在进程中调用fork使父进程终止,让Daemon在子进程中后台执行。
if(pid=fork())
2. 脱离控制终端,登录会话和进程组
说明:当进程是会话组长时setsid()调用失败。但第一点已经保证进程不是会话组长。
3. 禁止进程重新打开控制终端
现在,进程已经成为无终端的会话组长。但它可以重新申请打开一个控制终端。
可以通过使进程不再成为会话组长来禁止进程重新打开控制终端:
if(pid=fork())
4. 关闭打开的文件描述符
进程从创建它的父进程那里继承了打开的文件描述符。如不关闭,将会浪费系统资源,
造成进程所在的文件系统无法卸下以及引起无法预料的错误。按如下方法关闭它们:
for(i=0;i< NOFILE;++i)
5. 改变当前工作目录
进程活动时,其工作目录所在的文件系统不能卸下。一般需要将工作目录改变到根目录。
6. 重设文件创建掩模
进程从创建它的父进程那里继承了文件创建掩模。它可能修改守护进程所创建的文件的存取位。为防止这一点,将文件创建掩模清除:umask(0);
三、编程示例(deamon.c)
#include <stdio.h>
#include <time.h>
#include <unistd.h>
#include <signal.h>
#include <sys/param.h>
#include <sys/types.h>
#include <sys/stat.h>
void init_daemon(void);//守护进程初始化函数
void init_daemon(void)
{
}
main()
{
{
}
编译 gcc -o deamon deamon.c
执行 ./deamon
此后,守护进程一直运行,每隔一分钟,向/tmp/test.log写入状态语句:
I'm here at Wed Sep 26 17:22:12 2012
I'm here at Wed Sep 26 17:23:12 2012
运行命令 ps -ef,可以看到demon进程
如想结束deamon 进程:
kill 19246
- LINUX守护进程介绍
- Linux守护进程简介
- linux 守护进程编写
- linux 守护进程 daemon
- Linux实现守护进程
- Linux 守护进程
- linux 守护进程
- LINUX守护进程
- Linux 守护进程
- linux 守护进程 daemon
- linux守护进程介绍
- linux守护进程介绍
- Linux守护进程
- Linux守护进程
- Linux守护进程介绍
- linux之守护进程
- Linux 守护进程
- LINUX 守护进程
- cocos2dx 内存机制
- 最近写c++程序的心得
- 两升序数组合并成一个升序数组
- VC++2010下编译STLport,Boost
- vs2012-vs2010使用stlport库的配置
- linux--守护进程
- Drupal 7 Site Map
- C++ 模板学习
- ubuntu 搜索文件方法(find命令)
- web计算器javabean和jsp实现了一下
- 树的先序、中序、后序
- MySQL索引的使用
- 设计模式--通俗讲解
- C++ primer 学习摘抄之三(第四、五章 表达式和语句)