[Linux][守护进程]详细讲解 + 自主实现

news/2024/12/22 14:40:51/

目录


0.预备知识

  • **前台进程:**和终端关联的进程
  • 任何一次会话,只允许有一个前台进程和多个后台进程
  • 守护进程不能直接向显示器打印消息,一旦打印,会被暂停、终止

1.守护进程概念

  • 守护进程也叫做精灵进程,是特殊的孤儿进程
  • 它不但运行在后台,最主要的是脱离了与终端和登录会话的所有联系
    • 也就是默默的运行在后台不想受到任何影响
  • 守护进程是非常有用的进程,在Linux当中大多数服务器用的就是守护进程,比如Web服务器http等
    • 一般对外提供服务的服务器,都是以守护进程的方式工作的,一旦启动之后,除非用户主动关闭,否则,一直会在运行

2.进程组概念

  • 进程除了有自己的PID、PPID,还有一个PGID(组ID)
  • 进程组是由一个进程或者多个进程组成,通常它们与同一作业相关联,可以收到同一终端的信号
  • 每个进程组有一个进程组组长组长一般是第一个进程
  • 如何判断一个进程是不是这个进程组的组长?
    • 进程组ID = 进程ID --> 此进程就是对应进程组组长

3.会话概念

  • 任何一次登录,登陆的用户,需要有多个进程(组)来给这个用户提供服务的,用户可以自己启动很多进程(组)
    • 把给用户提供服务的进程或者用户自己启动的所有的进程或者服务,整体都是要属于一个叫做会话的机制中的
  • 如何将自己变成自成会话呢?
    • 系统调用**setsid()**
    • **setsid()**要被成功调用,必须保证当前进程不是进程组组长
  • 如何保证自己不是组长?
    • fork()

4.守护进程化的方式

  • 系统调用daemon()
    • 原型:int daemon(int nochdir, int noclose);
    • 参数:
      • **nochdir:**若为0,则将守护进程的工作目录改为根目录,否则不做处理
      • noclose:若为0,则将守护进程的标准输入、标准输出、标准错误重定向到/dev/null,否则不做处理
  • 自己实现一个daemon()
    • 推荐使用这种,大部分服务器都是自己实现
  • nohup命令

daemon_41">5.实现daemon()

// 自己实现一个daemon(),让进程变为守护进程
void Daemon()
{// 1.忽略信号,SIGPIPE,SIGCHLDsignal(SIGCHLD, SIG_IGN);signal(SIGPIPE, SIG_IGN);// 2.不要让自己成为进程组组长if(fork() > 0){exit(0);}// 3.调用setsid,让当前进程自成会话setsid();// 4.重定向标准输入、标准输出、标准输出// 守护进程不能直接向显示器打印消息int devnull = open("/dev/null", O_RDONLY | O_WRONLY);if(devnull > 0){dup2(0, devnull);dup2(1, devnull);dup2(2, devnull);close(devnull);}
}
  • 说明:/dev/null是一个字符文件(设备),类似于Linux下的一个"文件黑洞" or"垃圾桶",通常用于屏蔽/丢弃输入输出信息

http://www.ppmy.cn/news/1452756.html

相关文章

爱已无可救药

【爱的极限挑战】《爱已无可救药》—— 破晓前最暗的夜,恋人间最深的痴迷 在这个信息爆炸的时代,爱情故事千千万,但真正能触达心灵深处的,寥若晨星。《爱已无可救药》这部短剧,如同夜空中最耀眼的流星,划破…

Sqli-labs第一关到第四关

目录 一,了解PHP源代码 二,破解第一关 2.1在了解完源码之后,我们重点看一下 2.2破解这道题表中有几列 2.3查看表中哪一列有回显 2.4查询库,表,列信息 三,总结 前提: 之所以把1234关…

【算法系列】哈希表

目录 哈希表总结 leetcode题目 一、两数之和 二、判定是否互为字符重排 三、存在重复元素 四、存在重复元素 II 五、字母异位词分组 六、在长度2N的数组中找出重复N次的元素 七、两个数组的交集 八、两个数组的交集 II 九、两句话中的不常见单词 哈希表总结 1.存储数…

深度学习之基于Unet肺部CT图像分割项目

欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景 肺部CT图像分割在医学诊断中占据重要地位,它有助于医生快速、准确地识别和分析肺部病变。…

【JAVA项目】基于SSM的【电动车智能充电服务平台】

技术简介:采用SSM技术、MYSQL等技术实现。 系统简介:电动车智能充电服务平台实现了首页、个人中心、用户管理、充电桩管理、电池商品管理、托送服务管理、我的钱包管理、充值信息管理、消费信息管理、购买订单管理、配送信息管理、服务订单管理、系统管理…

wordpress子比主题美化-为图文列表封面添加动态缩略图特效 多种效果演示

wordpress子比主题-为图文列表文章封面添加动态缩略图特效 给自己子比主题加一个列表文章封面添加动态缩略图 直接复制以下代码,添加到主题自定义CSS代码中即可,下图为效果演示 wordpress子比主题-为图文列表文章封面添加动态缩略图特效 给自己子比主题…

【后端】RabbitMQ的常见使用问题

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、RabbitMQ 常见问题二、RabbitMQ 常见报错三、总结 前言 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很…

【MySQL | 第九篇】重新认识MySQL锁

文章目录 9.重新认识MySQL锁9.1MySQL锁概述9.2锁分类9.2.1锁的粒度9.2.2锁的区间9.2.3锁的性能9.2.4锁的级别 9.3拓展:意向锁9.3.1意向锁概述9.3.2意向锁分类9.3.3意向锁作用(1)意向锁的兼容互斥性(2)例子1&#xff08…