本文内容:

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. 微信硬件平台(十) 1 ESP8266通过mqtt交互消息

    //----------------------------------------------------------------------------------------// //----- ...

  2. 将idea中xml文件背景颜色去除(转)

    原贴链接:https://blog.csdn.net/weixin_43215250/article/details/89403678 第一步:除去SQL代码块的背景颜色,步骤如下 设置后还是很影响视 ...

  3. MongoDB TTL集合与固定集合

    1.固定集合     MongoDB可以创建固定长度的集合,可以设置最大的集合空间或最大的集合数.创建集合的语法如下:     db.createCollection("collection ...

  4. BZOJ 4477: [Jsoi2015]字符串树 可持久化trie树

    这个是真——可持久化字典树..... code: #include <bits/stdc++.h> #define N 100006 #define setIO(s) freopen(s& ...

  5. 汇编语言中 cs, ds,ss 的区别

    CS(Code Segment):代码段寄存器:DS(Data Segment):数据段寄存器:SS(Stack Segment):堆栈段寄存器:ES(Extra Segment):附加段寄存器.当一 ...

  6. python 微服务开发书中几个方便的python框架

    python 微服务开发是一本讲python 如果进行微服务开发的实战类书籍,里面包含了几个很不错的python 模块,记录下,方便后期回顾学习 处理并发的模块 greenlet && ...

  7. 虚拟变量和独热编码的区别(Difference of Dummy Variable & One Hot Encoding)

    在<定量变量和定性变量的转换(Transform of Quantitative & Qualitative Variables)>一文中,我们可以看到虚拟变量(Dummy Var ...

  8. es6学习4:async和await

    async async函数返回一个 Promise 对象,可以使用then方法添加回调函数.当函数执行的时候,一旦遇到await就会先返回,等到异步操作完成,再接着执行函数体内后面的语句. funct ...

  9. Git bash Error: Could not fork child process: There are no available terminals (-1)

    错误信息:Error: Could not fork child process: There are no available terminals (-1) 截图如下: 解决办法: (1)使用cmd ...

  10. egg.js搭建 api设置跨域

    1.egg简述 Egg.js,为企业级框架和应用而生,是阿里开源的企业级 Node.js 框架. 2.特点 Egg 奉行『约定优于配置』,按照一套统一的约定进行应用开发,团队内部采用这种方式可以减少开 ...