linux标准daemon编写方式
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。
linux标准daemon编写方式的更多相关文章
- linux运行二进制文件编写方式
chmod +x ./test.sh #使脚本具有执行权限 ./test.sh #执行脚本 注意,一定要写成 ./test.sh,而不是 test.sh,运行其它二进制的程序也一样,直接写 test. ...
- Linux下通过.desktop 文件创建桌面程序图标及文件编写方式(Desktop Entry文件概述)
Linux下通过.desktop 文件创建桌面程序图标及文件编写方式 1.Desktop Entry文件概述:在 Windows 平台上,用户可以通过点击位于桌面或菜单上的快捷方式轻松打开目标应用程序 ...
- Linux守护进程编写指南
Linux守护进程编写指南 守护进程(Daemon)是运行在后台的一种特殊进程.它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件.守护进程是一种很有用的进 程.Linux的大多数服务器 ...
- Linux内核调试的方式以及工具集锦【转】
转自:https://blog.csdn.net/gatieme/article/details/68948080 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原 ...
- Linux内核调试的方式以及工具集锦
原文:https://blog.csdn.net/gatieme/article/details/68948080 CSDN GitHubLinux内核调试的方式以及工具集锦 LDD-LinuxDev ...
- 到底应该选择那种Linux.NET的部署方式?
当前部署Linux.NET环境的方式可谓是五花八门,既有传统的源码编译的方式.又有各式各样的一键安装脚本.还有绿色包安装方式,而随着Mono官方的新站上线,更增加了采用RPM包的部署方式.那对于一名L ...
- Linux Makefile文件编写详细步骤与实践
Linux Makefile文件编写详细步骤与实践 1.makefile概述 Windows环境下IDE会帮你完成makefile文件的编写,但在UNIX环境下你就必须自己写makefile了,会不会 ...
- html css <input> javaScript .数据类型 JS中的函数编写方式 BOM总结 DOM总结
Day27 html css div 块标签. 特点: 独占一行,有高度和宽度 span 行元素. 特点:在同一行显示,当前行满了自动去下一行显示. 不识别高度和宽度 1.1.1.1 2.输入域标签 ...
- linux的软件安装方式总结
Linux系统中软件的“四”种安装原理详解:源码包安装.RPM二进制安装.YUM在线安装.脚本安装包 一.Linux软件包分类 1.1 源码包 优点: 开源,如果有足够的能力,可以修改源代码: 可 ...
随机推荐
- jenkins插件 build timeout和build timestamp
build timeout plugin, 允许对job设置timeout时间,当超时时,job将abort. build timestamp pluin,使得job log的每次输出前面都增加当时的 ...
- 整合GreyBox放大显示图片
<s:iterator value="#request.photoList" id="photo" status="stu"> ...
- iOS-项目打包为ipa文件
最近自己做的一个项目,由于app store发布流程比较复杂,且审核周期较长,客户希望提前能看到产品,所以我先给自己的项目打包成一个ipa文件(类似Android的apk安装包),然后发布在" ...
- Android PullToRefresh (ListView GridView 下拉刷新) 使用详解 (转载)
最近项目用到下拉刷新,上来加载更多,这里对PullToRefresh这控件进行了解和使用. 以下内容转载自:http://blog.csdn.net/lmj623565791/article/deta ...
- RTL8710 ROM 符号表 函数,常量,变量
函数 Name Address Ordinal ---- ------- ------- __vectors_table Reset_Handler NMI_Handler HardFault_Han ...
- lpxelinux启动linux
搭建环境: boot file 指定 lpxelinux.0 拷贝 lpxelinux.0 和 ldlinux.c32 到 tftp目录下. 新建pxelinux.cfg 文件夹, 里面放 ...
- Java httpclient请求,解决乱码问题
public class HttpPostRequestUtil { public HttpPostRequestUtil() { } public static String post(String ...
- openCV_java 图像二值化
较为常用的图像二值化方法有:1)全局固定阈值:2)局部自适应阈值:3)OTSU等. 局部自适应阈值则是根据像素的邻域块的像素值分布来确定该像素位置上的二值化阈值.这样做的好处在于每个像素位置处的二值化 ...
- Design / UX Consultation
Looking for a bit of creative inspiration, perhaps? Then get assistance with your app or project by ...
- webService----wsimport调用方式
一.工具 1.myEclipse 2.jdk1.7 二.创建服务端 1.创建web Service Project 命名为TheService 2.创建class类ServiceHello.java, ...