linux标准daemon编写方式
2013-12-02 22:54 ubunoon 阅读(559) 评论(0) 编辑 收藏 举报daemon定义
运行在后台的程序,通常不需要与用户进行交互的。
任何父进程id是0的通常是kernel进程,作为系统启动的一部分,除了init是用户态的命令。
规则
-
第一件事情是调用umask设置文件模型的mask为0,文件mode creation mask可以被进程继承,但daemon进程需要创建文件时,需要特殊的权限。
-
调用fork,退出父进程exit,这可以做几件事情,首先,daemon将使用shell命令行启动,其次,子进程继承了process group id,但获取一个新的id,因此我们可以确保子进程不会是一个process group leader,为调用setsid做准备。
-
调用setsid创建一个新的session。该进程开始成为一个新的session的session leader,然后成为新的process group的process group leader,并且没有controlling terminal。
一些基于System V的用户推荐再fork一下,第二个child仍旧是一个daemon,然后保证该daemon不是一个session leader,在System V规则下阻止得到一个控制终端。
避免获取一个终端,使用O_NOCTTY来确保打开一个非终端设备。
-
修改当前目录为根目录(即/),为房子daemon存在于mounted file system中,系统重启时,文件系统不能够unmounted。
-
不需要的文件描述符应该关闭,阻止从parent中继承下来的文件描述符。
-
由于没有终端的缘故,因此需要将文件描述符0,1和2将切换到/dev/null。
*
* Copyright (c) 2011 Ubunoon.
* All rights reserved.
*
* email: netubu#gmail.com replace '#' to '@'
* http://www.cnblogs.com/ubunoon
* 欢迎来邮件定制各类验证码识别,条码识别,图像处理等软件
* 推荐不错的珍珠饰品,欢迎订购 * 宜臣珍珠(淡水好珍珠) */