Apue:daemon
来源:互联网 发布:js中空格怎么表示 编辑:程序博客网 时间:2024/06/08 00:44
daemon特性
注意大部分的守护进程都有超级用户特权。没有一个守护进程具有控制终端。
内核守护进程以无控制终端方式启动。
用户守护进程缺少控制终端有可能是调用了setsid。所有用户守护进程都是进程组的组长进程以及会话的首进程,而且是这些进程组合会话中的唯一进程。
daemon编程准则
1.调用umask(0),把屏蔽字设置为0。这样做是为了防止继承来的文件屏蔽字可能会拒绝设置某些权限。
2.调用fork,并且是父进程exit。这样是为了让调用这个程序的东西(例如shell)可以乘早知道父进程终止,从而尽早返回。因为我们要生成的是一个daemon。并且fork之后,子进程的ID改变了,这样它就不会是一个进程组的组长,从而可以使得我们调用第三步中的setsid
3.调用setsid创建一个会话。调用setsid之后,进程就变成了一个会话的首进程,一个新进程组的组长,并且没有控制终端。
4.将当前目录更改为根目录。从父进程继承过来的目录可能是mount在别的文件系统中,在操作系统启动的时候,我们只mount了根目录,所以daemon进程需要把当前目录更改为根目录,否则就有可能造成工作目录还没有mount的情况。
5.关闭不需要的文件描述符。
6.一些守护进程让0,1,2号文件描述与/dev/null相关联,这样任何一个试图读写的库例程都不会产生任何效果。
出错日志
0 0
- Apue:daemon
- APUE-守护进程Daemon
- daemon
- Daemon
- Daemon
- daemon
- daemon
- daemon
- daemon
- daemon
- daemon
- daemon
- daemon
- Daemon
- apue
- APUE
- apue
- APUE
- Android Studio 自动根据布局生成Activity
- 在Android上打造属于自己的Rxjava框架(四)扩展成EventBus
- springmvc+hibernate的更新问题
- 349. Intersection of Two Arrays[][
- 关于appcompat_v7的问题
- Apue:daemon
- File::Find, find()
- iOS开发-ios7下拉刷新,上提加载快速集成
- Tomcat 架构
- Sql 序列
- iOS学习之——NSRunLoop
- java获取10以内的两组不同随机数(摸牌)
- BestCoder Round #57 Scaena Felix
- JS中的BOM和DOM