linux中的守护进程daemon
一. 守护进程及其特性
(1)最重要的特征是后台运行
(2)必须与运行前的环境隔离开来。这些环境通常是守护进程从执行它的父进程中继承下来的。环境包 括还未关闭的文件描述符,控制终端,会话和进程组,工作目录以及文件创建淹模等。
(3)启动方式。可以由用户终端执行,也可以从启动脚本/etc/rc.d中启动。
总之,编写守护进程实际上是把一个普通进程按照上述的守护进程的特性改造成为守护进程。
二.守护进程的编程要点
1.在后台运行
为避免挂起控制终端将daemon放入后台执行。方法是在进程中调用fork使父进程终止,让daemon 再子进程中后台执行。
2.脱离终端控制,登入会话和进程组
在1的基础上,调用setsid()使第一个子进程成为会话组长。由于会话过程对终端的独占性,进程同时与控制终端脱离。
setsid();
3.禁止进程重新打开控制终端
现在,进程已经成为无终端的会话组长。但它可以重新申请打开一个控制终端。
可以通过使进程不再成为会话组长来禁止进程重新打开控制终端:
if(pid=fork())
exit(0); //结束第一子进程,第二子进程继续(第二子进程不再是会话组长)
4. 关闭打开的文件描述符
进程从创建它的父进程那里继承了打开的文件描述符。如不关闭,将会浪费系统资源,
造成进程所在的文件系统无法卸下以及引起无法预料的错误。按如下方法关闭它们:
for(i=0;i 关闭打开的文件描述符close(i);>
5. 改变当前工作目录
进程活动时,其工作目录所在的文件系统不能卸下(即每个进程都由一个工作目录)。一般需要将工作目录改变到根目录。
对于需要转储核心,写运行日志的进程将工作目录改变到特定目录如 /tmpchdir("/")
6. 重设文件创建掩模
进程从创建它的父进程那里继承了文件创建掩模。它可能修改守护进程所创建的文件的存取位。
为防止这一点,将文件创建掩模清除:umask(0);
7. 处理SIGCHLD信号
处理SIGCHLD信号并不是必须的。
但对于某些进程,特别是服务器进程往往在请求到来时生成子进程处理请求。
如果父进程不等待子进程结束,子进程将成为僵尸进程(zombie)从而占用系统资源。
如果父进程等待子进程结束,将增加父进程的负担,影响服务器进程的并发性能。
&nb
相关文档:
总览
用iptables -ADC 来指定链的规
则
,-A添加 -D删除 -C 修改
iptables - [RI] chain rule num rule-specification[option]
用iptables - RI 通过规则的顺序指定
iptables -D chain rule num[option]
删除指定规则
iptables -[LFZ] [chain][option]
用iptables -LFZ 链名 [选项]
iptables -[NX] chain
用 -NX ......
Linux, named after the inventor, Linus Torvalds, is a so different OS for everyone against Windows. To everyone who used to use Windows, Linux need us to do more for everything which we usually do by computer, such as playing a video.
Someone says, Linux is for the ones who are good at the computer ......
牛津字典中对"kernel"一词的定义是:"较软的、通常是一个坚果可食用的部分。"当然还有第二种定义:"某个东西核心或者最重要的部分。"对Linux来说,它的Kernel无疑属于第二种解释。让我们来看看这个重要的东西是如何工作的,先从一点理论说起。
广义地来说kernel就是一个软件,它在硬件和运行在计算机上 ......
1、将驱动源码放在/drivers/char/下
2、修改drivers/char/Kconfig文件,添加以下内容:
config My_Buttons
tristate "My_Buttons test"
depends on ARCH_S3C2440
default y if ARCH_S3C2 ......