Linux Daemon进程
模型
- 创建孤儿进程 fork()
- 创建新的会话 setid()
- 改变当前目录为根目录chdir()
- 重设文件权限掩码umask()
- 关闭文件描述符close()
创建孤儿进程
创建孤儿进程只需要将父进程关闭保留子进程
pid_t pid_child=fork();
if(0<pid_child){
exit(0);
}
创建新的会话

会话组是一个或多个进程组的集合,一个shell就是一个会话,可以分为前台进程组和后台进程组,每个进程组都有一个组长,组长进程的pid就是进程组的id,当一个会话结束的时候,依附于它的进程都会关闭
setsid()函数用于创建一个新的会话,并使得当前进程成为新会话组组长,也就是说使进程完全独立出来,从而脱离所有其他进程的控制,但是setsid()不能在一个会话组长进程中被调用,所以我们先创建子进程,并使其成为孤儿进程,这样它就脱离了原来的会话,此时调用setsid可以使其成为一个新的会话的组长进程。当然,作为组长进程,虽然它脱离了原来的会话,失去了终端,满足了守护进程的需求,但是它完全可以自己再打开一个终端,所以我们有时会在准备好守护进程条件之后再fork一次创建孙进程,然后让子进程自杀,在孙进程中执行守护进程的代码,这样新的守护进程就不会开启自己的终端。
pid_t pid;
pid=setsid();
改变当前目录为根目录
守护进程的工作目录是不能被卸载的,选择根目录是个很好的方式,切换进程的工作目录可以使用chdir()
chdir("\");
重设文件权限掩码
文件权限掩码是指问家权限中被屏蔽掉的对应位,把文件权限掩码设置为0,可以增加该守护进程的灵活性,和$umask类似,设置进程的文件权限掩码的函数是umask()
umask(0); //将文件权限掩码设为0
关闭文件描述符
如果父进程中打开的文件时候没有指定"close-on-exec"选项,那么子进程会继承父进程的文件描述符,这些文件描述符在制作守护进程的时候需要将其关闭。一个进程打开的所有文件描述符都在该进程的文件描述符表中,这个表的大小可以使用函数gettablesize()来获得
fdtablesize=gettablesize();
for(fd=0;fd<fdtablesize;fd++){
close(fd);
}
再次创建孤儿进程
pid_t pid_gchild=fork();
if(0<pid_gchild){
exit(0);
}
//孙进程执行的代码
Linux Daemon进程的更多相关文章
- Linux守护进程daemon
守护进程,也就是通常说的Daemon进程,是Linux中的后台服务进程.它是一个生存期较长的进程,通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件.守护进程常常在系统引导装入时启 ...
- Linux中创建Daemon进程的三种方法
什么是daemon进程? Unix/Linux中的daemon进程类似于Windows中的后台服务进程,一直在后台运行运行,例如http服务进程nginx,ssh服务进程sshd等.注意,其英文拼写为 ...
- Linux系统编程——Daemon进程
目录 Daemon进程介绍 前提知识 Daemon进程的编程规则 Daemon进程介绍 Daemon运行在后台也称作"后台服务进程". 它是没有控制终端与之相连的进程.它独立与控制 ...
- CentOS 7.4 初次手记:第一章 Linux守护进程(daemon)
第一节 init & sysvinit 6 I sysvinit 运行顺序... 6 II Sysvinit和系统关闭... 7 III Sysvinit 的小结... 7 IV 运行级别.. ...
- .NET跨平台实践:用C#开发Linux守护进程-Daemon
Linux守护进程(Daemon)是Linux的后台服务进程,它脱离了与控制终端的关联,直接由Linux init进程管理其生命周期,即使你关闭了控制台,daemon也能在后台正常工作. 一句话,为L ...
- linux 守护进程 daemon
Linux的Service/Daemon你真的懂了吗? Linux 守护进程的启动方法 linux系统编程之进程(八):守护进程详解及创建,daemon()使用 linux守护进程 daemon 详解
- .NET跨平台实践:用C#开发Linux守护进程
Linux守护进程(Daemon)是Linux的后台服务进程,它脱离了与控制终端的关联,直接由Linux init进程管理其生命周期,即使你关闭了控制台,daemon也能在后台正常工作. 一句话,为L ...
- .NET跨平台实践:用C#开发Linux守护进程(转)
Linux守护进程(Daemon)是Linux的后台服务进程,它脱离了与控制终端的关联,直接由Linux init进程管理其生命周期,即使你关闭了控制台,daemon也能在后台正常工作. 一句话,为L ...
- [转]❲阮一峰❳Linux 守护进程的启动方法
❲阮一峰❳Linux 守护进程的启动方法 "守护进程"(daemon)就是一直在后台运行的进程(daemon). 本文介绍如何将一个 Web 应用,启动为守护进程. 一.问题的由来 ...
随机推荐
- Java多线程学习笔记
进程:正在执行中的程序,其实是应用程序在内存中运行的那片空间.(只负责空间分配) 线程:进程中的一个执行单元,负责进程汇总的程序的运行,一个进程当中至少要有一个线程. 多线程:一个进程中时可以有多个线 ...
- Mybatis 入门 -- 最简单的引入和使用
参考:http://www.mybatis.org/mybatis-3/zh/getting-started.html 从今天开始学习官方文档. 1.项目搭建 项目结构: 首先,搭建一个maven项目 ...
- MyBatis入门基础(一)
一:对原生态JDBC问题的总结 新项目要使用mybatis作为持久层框架,由于本人之前一直使用的Hibernate,对mybatis的用法实在欠缺,最近几天计划把mybatis学习一哈,特将学习笔记记 ...
- 淘宝购物车页面 智能搜索框Ajax异步加载数据
如果有朋友对本篇文章的一些知识点不了解的话,可以先阅读此篇文章.在这篇文章中,我大概介绍了一下构建淘宝购物车页面需要的基础知识. 这篇文章主要探讨的是智能搜索框Ajax异步加载数据.jQuery的社区 ...
- 可控制导航下拉方向的jQuery下拉菜单代码
效果:http://hovertree.com/texiao/nav/1/ 代码如下: <!DOCTYPE html> <html> <head> <meta ...
- [调整] Firemonkey iOS 原生 Edit 透明框, 改变框色
说明:iOS 原生 Edit 透明框 适用:Berlin Firemonkey 方法:在 StyleLookup 输入 transparentedit 效果: 如果有图片 Image 在这二个 Edi ...
- 基于小脚丫DDS 调频 调幅 调相 切换波形 AD5601输出模拟波形
先讲讲里面的矩阵键盘,矩阵键盘列有下拉电阻,默认全为0000,默认行输入为1111,当有按键按下的时候,列输入会被拉高,这时控制行的输出做行扫描,电子琴用key_flag_r0电平作为使能,这里用ke ...
- 使用python发送和接收邮件
关于电子邮件 大学之前,基本不用邮箱,所以基本感觉不到它的存在,也不知道有什么用:然而大学之后,随着认识的人越来越多,知识越来越广泛,邮箱已然成为很重要的通讯工具,大学一些课程作业需要有邮箱发给老师, ...
- php实现设计模式之 访问者模式
<?php /** * 访问者模式 * 封装某些作用于某种数据结构中各元素的操作,它可以在不改变数据结构的前提下定义作用于这些元素的新的操作. * 行为类模式 */ /** 抽象访问者:抽象类或 ...
- 从零开始学 Java - 数据库连接池的选择 Druid
我先说说数据库连接 数据库大家都不陌生,从名字就能看出来它是「存放数据的仓库」,那我们怎么去「仓库」取东西呢?当然需要钥匙啦!这就是我们的数据库用户名.密码了,然后我们就可以打开门去任意的存取东西了. ...