一、守护进程是什么

守护进程是生存期很长的一种进程,可以说它是7*24小时工作的。(什么是7*24,一周7天,每天24小时,这不就是一年365天一直在工作嘛,还搞的这么诙谐,哈哈)。它们常常在系统引导装入时启动,仅在系统关闭时才终止。因为它们没有控制终端,所以说它们是在后台运行的,而且它没法直接和用户交互。当然在后台运行的可不一定是守护进程哦。Unix下有很多守护进程,执行日常事务。守护进程是一种很有用的进程,Linux下的很多服务器大多是用守护进程实现的。比如Internet服务器inetd,Web服务器httpd等。

守护进程还有一个特点:其它进程都是在用户登录或运行程序时创建,在运行结束或用户注销时终止,但系统服务进程不受用户登录注销的影响,它们一直在运行着。

我们用ps -axj来查看系统中的进程。-a显示由其他用户所拥有的进程的状态,-x显示没有控制终端的进程,-j显示与作业有关的信息(进程组ID,会话ID,控制终端,终端进程组ID)。守护进程通常以d为结尾。

由上述的进程中,TPGID为-1的都是没有控制终端的进程,也是守护进程。还有像COMMAND那一列中,用[]括起来的进程名,都表示内核线程。这些线程在内核里创建,没有用户空间代码,因此没有程序文件名和命令行,以k开头,表示Kernel。它自成进程组,自成会话。

进程1通常是init,它是一个系统守护进程。

二、创建守护进程

我们写一个mydaemon:

步骤哈:1.创建守护进程首先得,调用umask来将文件模式创建屏蔽字设置为0。

2.调用fork,使父进程退出。因为在这里,后面使用setid不允许进程为进程组id,因此得先将父进程exit。

3.调用setid创建一个新会话,成为会话首进程,成为进程组组长,没有控制终端。这就是守护进程的特点吧。

4.将当前的工作目录改为根目录。你想想,如果你将守护进程的工作目录设置为当前工作目录而非根目录,那么如果将这个目录删除后,就会导致严重的丢失问题。你的那个目录将不能被删除。

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

守护进程实现:

#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<signal.h>
void mydaemon()
{umask(0);if(fork() <=  0)//child{}else//father{exit(0);}setsid();signal(SIGCHLD,SIG_IGN);close(0);close(1);close(2);chdir("/");}int main()
{mydaemon();
//  daemon(0,0);while(1);return 0;
}

运行结果:

这样一个守护进程就写好啦。当然库里边也实现了一个守护进程,daemon函数。

int daemon(int nochdir, int noclose);

这里nochdir表示不改变当前守护进程的目录,noclose表示不关闭进程文件描述符。

当前我们是把工作目录修改了,所以:

当我们都设置为0时,daemon(0,0);说明修改; 当我们都设置为1时,daemon(1,1);说明不修改;

三、为什么创建守护进程时有人fork两次?

第二次fork的作用:虽然当前关闭了和终端的联系,但是后期可能会误操作打开了终端。只有会话首进程能打开终端设备,也就是再fork一次,再把父进程退出,再次fork的子进程作为守护进程继续运行,保证了该精灵进程不是会话的首进程,第二次不是必须的,是可选的,市面上有些开源项目也是fork一次。(再次fork一次,保证daemon进程,之后不会打开tty设备)

[Linux]守护进程(精灵进程)相关推荐

  1. [Linux]----守护进程

    文章目录 前言 一.什么是守护进程? 二.会话和进程组 会话 进程组 三.守护进程的编程流程 四.命令行指令让进程守护化 总结 总结 前言 这节课我来给大家讲解在Linux下如何让进程守护化,运行在后 ...

  2. linux进程通信发送方式,Linux服务器编程——Linux系统编程之进程通信

    进程通信又称IPC IPC方法 方法:管道(最简单) 信号(开销最小) 共享映射区/共享内存(无血缘关系) 本地套接字(最稳定) Linux文件类型: -   文件 d  目录 l   符号链接 s  ...

  3. linux系统编程之进程概念(操作系统---管理,进程创建,进程状态,进程优先级, 环境变量,程序地址空间,进程O(1)调度方法)

    系统编程: 进程概念->进程控制->基础IO->进程间通信->进程信号->多线程 进程概念 冯诺依曼体系结构----现代计算机硬件体系结构 冯诺依曼体系结构----现代计 ...

  4. linux 创建精灵进程,linux 进程通信之 守护进程

    守护进程(Daemon) Daemon(精灵)进程,是linux中的后台服务进程,通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的时间.一般采用以d结尾的名字.从下面的进程信息可以看出, ...

  5. [Linux](16)网络编程:网络概述,网络基本原理,套接字,UDP,TCP,并发服务器编程,守护(精灵)进程

    文章目录 网络协议初识 OSI 七层模型 TCP/IP 四层(或五层)模型 IP.MAC.端口号 TCP 协议与 UDP 协议 套接字 套接字地址结构 socket 函数 bind 函数 recvfr ...

  6. Linux学习之系统编程篇:守护进程(精灵进程、后台进程)

    一.背景 一般情况下,启动终端(shell),系统会创建一个会话(shell 进程是会长),经过后续各种操作,该会话中会存在多个进程组,每个进程组中也会有多个进程(父进程是组长),若此时关闭 shel ...

  7. Linux 进程(一) 进程概念和进程状态(僵尸进程、孤儿进程、守护进程)

    进程的概念 进程状态 僵尸进程.孤儿进程.守护进程 进程的概念 程序:一系列有序的指令集合(就是我们写的代码) 进程:进程就是程序的一次执行,是系统进行资源分配和调度的独立单位. 程序是一个没有生命的 ...

  8. Linux守护进程设计规范及python实现

    http://blog.csdn.net/mr_jj_lian/article/details/7252222 守护进程 守护进程是生存期长的一种进程.它们独立于控制终端并且周期性的执行某种任务或等待 ...

  9. linux 守护进程小结

    守护进程(daemon) 也称精灵进程,是一类在后台运行的特殊进程,用于执行特定的系统任务.很多守护进程在系统引导的时候启动,并且一直运行直到系统关闭.另一些只在需要的时候才启动,完成任务后就自动结束 ...

最新文章

  1. android加载时二级联动点击二级联动,Android实现联动下拉框二级地市联动下拉框功能...
  2. 自用零散博文-route_state.ts
  3. 怎么在idea中找实现类
  4. 23 Refs的应用场景与选用思考
  5. Azure Data Explorer(Kusto)学习笔记
  6. 杭电2027--统计元音
  7. Memcached内存分配机制
  8. css美化浏览器默认滚动条样式
  9. 产品经理必备原型工具Axure RP 8自定义元件库
  10. 计算机b类b级2020,CPU天梯图2020_笔记本CPU天梯图2020最新版【7月更新】-太平洋IT百科...
  11. 网络安全之暴力破解win7密码
  12. mysql中插入数据时Duplicate entry ‘‘ for key ‘PRIMARY‘的解决方案
  13. Linux rescue
  14. python红楼梦作者_用 Python 分析《红楼梦》,后四十回是曹雪芹所写吗?(开源)...
  15. Win11如何关闭自动更新?Win11更新服务关闭教程
  16. A component required a bean of type ‘com.dmsd.spm.provider.service.BookServi
  17. Modeling Task Relationships in Multi-task Learning withMulti-gate Mixture-of-Experts
  18. PPT基础(十五)调整形状的透明度
  19. 工信部计算机二级证书有什么用,公务员考试,这三个证书用处大,持证年薪10W+...
  20. 这就是爱,说也说不清楚

热门文章

  1. 【antd】输入控件的思想
  2. 面试题4,打印出100-999所有的“水仙花数”。
  3. linux ubuntu 关于vim得一些基本命令
  4. unity json解析IPA后续
  5. eclipse 下使用git clone
  6. Android JNI编程(五)——C语言的静态内存分配、动态内存分配、动态创建数组...
  7. 财务部门:你需要多长时间才能够回答老板的这些问题?
  8. poj 3728(LCA + dp)
  9. 一个简单的python日志服务器
  10. 中大计算机考研复试刷人太狠,中山大学考研复试被刷原因大盘点!