本文内容:

1.守护进程的定义

2.守护进程的作用

3.守护进程的创建过程

一.守护进程的定义

1.守护进程是脱离于终端并且在后台运行的进程

2.守护进程脱离终端是为了避免在执行过程中的信息在任何终端上显示,并且不被任何终端产生的终端信息所打断

3.守护进程通常在系统引导装入时启动

二.守护进程的作用

1.守护进程是一个生存周期较长的进程,通常独立于控制终端并且周期性的执行某种任务或者等待处理某些待发生的事件

2.大多数服务都是通过守护进程实现的

3.关闭终端,相应的进程都会被关闭,而守护进程却能够突破这种限制

三.守护进程的创建过程

背景知识:

1. 进程组:一个或多个进程的集合,进程组由进程组ID标识,进程组长的进程ID和进程组ID一致,并且进程组ID不会由于进程组长的退出而受到影响

2. 会话周期:一个或多个进程组的集合,比如用户从登陆到退出,这个期间用户运行的所有进程都属于该会话周期

3.setsid函数:创建一个新会话,并担任该会话组的组长,调用setsid函数的目的:让进程摆脱原会话,原进程组,原终端的控制

创建守护进程的过程:

1.创建子进程,父进程退出

子进程变成孤儿进程,然后由1号init进程收养

2.子进程创建新会话

调用setsid创建新的会话,摆脱原会话,原进程组,原终端的控制,自己成为新会话的组长

3.将当前目录改为根目录

正在运行的进程文件系统不能卸载,如果目录要回退,则此时进程不能做到,为了避免这种麻烦,以根目录为当前目录

4.重设文件权限掩码

子进程的文件权限掩码是复制的父进程的,不重新设置的话,会给子进程使用文件带来诸多麻烦

5.关闭不需要的文件描述符

子进程的文件描述符也是从父进程复制来的,那些不需要的文件描述符永远不会被守护进程使用,会白白的浪费系统资源,还可能导致文件系统无法结束

样例程序:守护线程每隔100s就向文件写入一句话

#include <iostream>
#include<pthread.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
#include<errno.h>
#include<semaphore.h>
#include<sys/wait.h>
#include<sys/types.h>
#include<fcntl.h>
#include<sys/stat.h>
using namespace std; #define max_file 65535 int main()
{
pid_t pc;
int fd,len; char buf[]="this is a demo\n";
len=strlen(buf); pc=fork();//第一步,创建子进程 if(pc<0)
{
cout<<"fork error"<<endl;
exit(1);
}
else if(pc>0)
{
exit(0);//第二步,父进程退出
}
else
{
setsid();//第三步,创建新会话 chdir("/");//第四步,将当前目录改为根目录 umask(0);//第五步,重新设置文件权限掩码 for(int i=0; i<max_file; i++)
{
close(i);//第六步,关闭不需要的文件描述符
} while(1)
{
if((fd=open("/tmp/dameo.log",O_CREAT|O_WRONLY|O_APPEND,0600))<0)
{ cout<<"open erro"<<endl;
exit(1);
}
write(fd,buf,len+1); close(fd); sleep(100);//每隔100s输出一句话到文件
}
}
}

【Linux】守护进程的定义,作用,创建流程的更多相关文章

  1. CentOS 7.4 初次手记:第一章 Linux守护进程(daemon)

    第一节 init & sysvinit 6 I sysvinit 运行顺序... 6 II Sysvinit和系统关闭... 7 III Sysvinit 的小结... 7 IV 运行级别.. ...

  2. Linux多任务编程之七:Linux守护进程及其基础实验(转)

    来源:CSDN  作者:王文松  转自Linux公社 ------------------------------------------------------------------------- ...

  3. Server Develop (七) Linux 守护进程

    守护进程 守护进程,也就是通常说的Daemon进程,是Linux中的后台服务进程.它是一个生存期较长的进程,通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件.守护进程常常在系统引导装 ...

  4. Linux守护进程详解(init.d和xinetd) [转]

    一 Linux守护进程 Linux 服务器在启动时需要启动很多系统服务,它们向本地和网络用户提供了Linux的系统功能接口,直接面向应用程序和用户.提供这些服务的程序是由运行在后台 的守护进程来执行的 ...

  5. Linux守护进程详解(init.d和xinetd)

    一 Linux守护进程 Linux 服务器在启动时需要启动很多系统服务,它们向本地和网络用户提供了Linux的系统功能接口,直接面向应用程序和用户.提供这些服务的程序是由运行在后台的守护进程来执行的. ...

  6. 笔记整理--Linux守护进程

    Linux多进程开发(三)进程创建之守护进程的学习 - _Liang_Happy_Life__Dream - 51CTO技术博客 - Google Chrome (2013/10/11 16:48:2 ...

  7. linux守护进程、SIGHUP与nohup详解

    前端时间帮忙定位个问题.docker容器故障恢复后,其中的keepalived进程始终无法启动,也看不到Keepalived的日志. strace 查看系统调用之后,发现了原因所在 socket(PF ...

  8. 【转】学习Linux守护进程详细笔记

    [原文]https://www.toutiao.com/i6566814959966093837/ Linux守护进程 一. 守护进程概述 守护进程,也就是通常所说的Daemon进程,是Linux中的 ...

  9. [Linux] 守护进程和守护线程

    对于JAVA而言,一般一个应用程序只有一个进程——JVM.除非在代码里面另外派生或者开启了新进程. 而线程,当然是由进程开启的.当开启该线程的进程离开时,线程也就不复存在了. 所以,对于JAVA而言, ...

随机推荐

  1. @getMapping和@postMapping,@RestController 区别

    @getMapping和@postMapping,@RestController   @RequestMapping   和  @GetMapping @PostMapping 区别 @GetMapp ...

  2. php+tcpdf生成pdf: 中文乱码

    TCPDF是一个生成PDF的不错的库,可惜,官方对包括中文在内的东亚字体支持不怎么样的.场景:某项目需要根据数据库信息生成pdf格式的发票,考虑采用稳定的tcpdf,虽然还有许多其它选择,但是这个应该 ...

  3. javascript 终极循环方法for... of ..推荐

    js目前有很多的循环方法,如for, forEach,  for .. in,  for of 等等,而在ES6里面,我们又增加了一些数据结构,比如set,map,Symbol等. 那么我们该选取哪一 ...

  4. 2019.12.10 定义数组及java内存划分

    //数据类型[ ] 数组名 = new 数据类型[元素个数或数组长度]; int[] x = new int[100]; //类型[] 数组名 = new 类型[]{元素,元素,……}; String ...

  5. WinDbg常用命令系列---?*

    ? (Command Help) 问号(?)字符显示所有命令和运算符的列表.问号本身显示命令帮助. 环境 模式 用户模式下,内核模式 目标 实时. 崩溃转储 平台 全部 0:000> ? Ope ...

  6. Prisma 2 is Coming Soon

    转自:https://www.prisma.io/blog/prisma-2-is-coming-soon-mwwfhevie993 Prisma 2 will introduce many fund ...

  7. 73: luogu 2014 树形dp

    $des$ 在大学里每个学生,为了达到一定的学分,必须从很多课程里选择一些课程来学习,在课程里有些课程必须在某些课程之前学习,如高等数学总是在其它课程之前学习.现在有N门功课,每门课有个学分,每门课有 ...

  8. SQL基础-连接表

    一.连接表 1.SQL JOIN 忘记在哪保存的某位网友的图,先明白SQL JOIN, 2.关于笛卡尔积 笛卡尔积: 两个集合的乘积 重新建student表和teacher表: student表: C ...

  9. Js 之正则验证手机号、QQ、身份证等

    // 常见的 正则表达式 校验 // QQ号.手机号.Email.是否是数字.去掉前后空格.是否存在中文.邮编.身份证.URL.日期格式.IP let myRegExp = { // 检查字符串是否为 ...

  10. 【算法编程 C++ python】单链表反序输出

    题目描述 输入一个链表,从尾到头打印链表每个节点的值.   以下方法仅仅实现了功能,未必最佳.在牛客网测试, C++:3ms 480k Python:23ms 5732k /** * struct L ...