先来说下我理解的守护进程:守护进程没有控制终端,我觉得可以把它理解为一个后台进程。

本篇文章假设读者知道什么是进程组与会话。

下面看一下unix环境高级编程中守护进程的创建流程:

1.首先在进程中调用fork进程,这样就能保证子进程不是进程的组长进程(因为进程组的组长进程不能调用setsid创建新的会话),然后结束掉父进程。这时子进程就变成了会话首进程,并且创建了一个会话。

2.接下来在会话首进程中忽略掉sighup信号,这样在接下来调用fork创建的子进程中也会继承对该信号忽略的处理。因为我们要创建一个没有控制终端的进程,所以我们可以这样做:在会话首进程中调用fork创建一个子进程,然后再结束掉会话首进程,因为会话首进程是负责和终端建立联系的,当我们把会话首进程结束掉之后,那么该会话也就没有控制终端了,结束掉会话首进程之后,子进程会收到sighup信号,因为这个对这个信号的默认处理为结束掉进程,所以如果前面我们不在会话首进程中把对该信号的动作设为忽略就会结束掉刚创建的子进程。当把会话首进程结束掉之后,那么该子进程就会变为该会话中的唯一一个进程,且没有控制终端,这个子进程就是我们要创建的守护进程。

下面是unix坏境高级编程中创建守护进程的源码:

上面说到当会话首进程结束之后,其子进程会接收到sighup信号,接下来我们看看什么情况下一个进程会接收到sighup信号:

SIGHUP会在以下3种情况下被发送给相应的进程:

1、终端关闭时,该信号被发送到session首进程以及作为job提交的进程(即用 & 符号提交的进程)

2、session首进程退出时,该信号被发送到该session中的前台进程组和后台进程组中的每一个进程

3、若进程的退出,导致一个进程组变成了孤儿进程组,且新出现的孤儿进程组中有进程处于停止状态,则SIGHUP和SIGCONT信号会按顺序先后发送到新孤儿进程组中的每一个进程。

注:孤儿进程组:该组中每个成员的父进程要么是该进程组的成员要么不是该会话的成员。

linux下守护进程的创建和sighup信号相关推荐

  1. SIGHUP信号的作用以及守护进程为什么要忽略SIGHUP信号

    SIGHUP信号的作用: 比如修改了 nginx 配置文件,希望不重启 nginx 就让配置生效,可以往 nginx 进程发一个 SIGHUP信号. 守护进程为什么要忽略SIGHUP信号? 首先创建一 ...

  2. Linux下守护进程(daemon)的实现

    文章目录 守护进程 守护进程的创建 守护进程的实现 守护进程 守护进程是一种特殊的孤儿进程,父进程是一号init进程,运行在后台,与终端和登陆会话脱离关系,不受影响. 守护进程通常系统引导的时候启动, ...

  3. linux c 守护进程创建原理及简易方法

    1:什么是Linux下的守护进程 Linux daemon是运行于后台常驻内存的一种特殊进程,周期性的执行或者等待trigger执行某个任务,与用户交互断开,独立于控制终端.一个守护进程的父进程是in ...

  4. Linux系统编程之--守护进程的创建和详解【转】

    本文转载自:http://www.cnblogs.com/mickole/p/3188321.html 一,守护进程概述 Linux Daemon(守护进程)是运行在后台的一种特殊进程.它独立于控制终 ...

  5. Linux守护进程的创建(结合nginx框架)

    Linux守护进程的创建(结合nginx框架) 先介绍几个相关函数: int dup2(arg1,arg2):参数一指向的内容赋给参数二,shi的参数二也能访问参数一所指向的内容,并返回新的描述符 i ...

  6. 浅析Linux守护进程、守护进程的创建步骤

    文章目录 何为守护进程 进程组 / 组长进程 / 会话 / 会话首进程 进程组 会话 程序示例 守护进程的创建步骤 创建守护进程程序示例 何为守护进程 守护进程(daemon)是一类在后台运行的特殊进 ...

  7. 守护进程的创建方法和步骤

    概念:      守护进程(Daemon)是运行在后台的一种特殊进程.它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件.守护进程是一种很有用的进程.Linux的大多数服务器就是用守护进 ...

  8. 【Linux】- 守护进程的启动方法

    转自:Linux 守护进程的启动方法 Linux中"守护进程"(daemon)就是一直在后台运行的进程(daemon). 本文介绍如何将一个 Web 应用,启动为守护进程. 一.问 ...

  9. linux下查看进程的线程数,linux查看进程的线程数

    top -H -p $PID  #查看对应进程的那个线程占用CPU过高 1.top -H 手册中说:-H : Threads toggle 加上这个选项启动top,top一行显示一个线程.否则,它一行 ...

最新文章

  1. 打造线下版元宇宙!机器人VR助力远程做核酸,登上Science子刊
  2. Kraken2 物种序列比对 注释
  3. 【MM配置】Purchasing 采购配置
  4. 20165333第一次课堂测试补漏
  5. LeetCode--Add Two Numbers
  6. neo4j 修改密码
  7. Javascript模块模式学习分享
  8. 产品经理思维模型:文化母体、品牌寄生、超级符号
  9. 运行Qt程序的一些注意事项
  10. 使用jquery datatables插件遇到fnReloadAjax的问题
  11. spss多元线性回归散点图_案例分析 | 多元线性回归及SPSS操作
  12. 使用 logback + slf4j 进行日志记录
  13. 内网安全-隧道穿透漫游
  14. 苹果iPad守江山,安卓平板搅江湖】
  15. ad转换中断方式C语言程序,STC12C2052AD AD转换C程序 +PWM输出功能实现
  16. 腾讯云服务器架设mir2
  17. n一加关闭小部件_小部件
  18. Stata:各类全要素生产率TFP估算方法
  19. matlab dvb,DVB-T OFDM Matlab仿真的整理和疑问
  20. 一元多项式计算器C语言实现

热门文章

  1. 杭电OJ 2008 C语言版 已通过
  2. HttpServletResponse setHeader 和 addHeader区别
  3. 防火墙的安全策略及其三种工作模式
  4. python库——图形艺术
  5. 最受欢迎的当代设计风格
  6. OpenCV之直方图绘制(calcHist函数详解)
  7. 企鲸客SCRM和微盛SCRM管理系统的区别
  8. 使用Java IO流实现网页数据爬取(一)
  9. mysql+heartbeat+drbd安装
  10. python图像处理之图像灰度化