热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

守护进程以及fork两次的问题

守护进程?守护进程也称“精灵进程”,一般而言,守护进程7*24h运行着,它不受用户登录与注销的影响。Linux中的很多系统服务进程就是守护进程。如何识别守护进程?凡是TPGID为-

守护进程?
守护进程也称“精灵进程”,一般而言,守护进程7*24h运行着,它不受用户登录与注销的影响。Linux中的很多系统服务进程就是守护进程。

如何识别守护进程?
凡是TPGID为-1的进程都是守护进程,通常守护进程的命名以”d”结尾,表示daemon。这里写图片描述

守护进程的特点
(1)独立于控制终端。
控制终端可以给进程发送信号,而这些信号可能会导致进程退出,这就使得进程不能正常的处理某些任务,特别是系统任务。所以就需要让进程独立于控制终端去执行某些任务或处理某些事件。
(2)守护进程是孤儿进程。
因为守护进程的父进程是1号进程init。
(3)守护进程自成会话,且是会话的话首进程。
这要求调用setsid()创建会话的进程不能为进程组的组长进程即进程组中的第一个进程,所以当前进程要先fork()创建出子进程再调用setsid()。
(4)守护进程自成进程组,且是进程组的组长进程。
(5)守护进程不受用户登录和注销的影响。
守护进程独立于控制终端,不能直接和用户交互。

如何创建守护进程?
(1)调用umask()将权限设置为0;
(2)调用fork()创建子进程,父进程退出;
(3)调用setsid()创建新会话;
(4)调用chdir()将当前工作目录更改为根目录;
(5)关闭不再需要的文件描述符;
(6)忽略SIGCHLD信号,以防止出现僵尸进程。

守护进程的实现
这里写图片描述

这里写图片描述

可以看到PID=PGID=SID

守护进程的两次fork()
这里写图片描述

守护进程的两次fork()实现
这里写图片描述

这里写图片描述


推荐阅读
  • 本文详细介绍了网络存储技术的基本概念、分类及应用场景。通过分析直连式存储(DAS)、网络附加存储(NAS)和存储区域网络(SAN)的特点,帮助读者理解不同存储方式的优势与局限性。 ... [详细]
  • 本文介绍了Linux系统中的文件IO操作,包括文件描述符、基本文件操作函数以及目录操作。详细解释了各个函数的参数和返回值,并提供了代码示例。 ... [详细]
  • 如何使用PyCharm及常用配置详解
    对于一枚pycharm工具的使用新手,正确了解这门工具的配置及其使用,在使用过程中遇到的很多问题也可以迎刃而解,文中有非常详细的介绍, ... [详细]
  • 本文详细介绍如何在Linux系统中配置SSH密钥对,以实现从一台主机到另一台主机的无密码登录。内容涵盖密钥对生成、公钥分发及权限设置等关键步骤。 ... [详细]
  • 本文介绍Linux中的Diff命令,该命令用于逐行对比两个文本文件,展示它们之间的差异。通过系统性检查,它能有效标识出文件间所有不同的行,无需事先对文件进行排序。 ... [详细]
  • Python第三方库安装的多种途径及注意事项
    本文详细介绍了Python第三方库的几种常见安装方法,包括使用pip命令、集成开发环境(如Anaconda)以及手动文件安装,并提供了每种方法的具体操作步骤和适用场景。 ... [详细]
  • 磁盘健康检查与维护
    在计算机系统运行过程中,硬件或电源故障可能会导致文件系统出现异常。为确保数据完整性和系统稳定性,定期进行磁盘健康检查至关重要。本文将详细介绍如何使用fsck和badblocks工具来检测和修复文件系统及硬盘扇区的潜在问题。 ... [详细]
  • 在创建新的Android项目时,您可能会遇到aapt错误,提示无法打开libstdc++.so.6共享对象文件。本文将探讨该问题的原因及解决方案。 ... [详细]
  • CentOS 6.5 上安装 MySQL 5.7.23 的详细步骤
    本文详细介绍如何在 CentOS 6.5 系统上成功安装 MySQL 5.7.23,包括卸载旧版本、下载安装包、配置文件修改及启动服务等关键步骤。 ... [详细]
  • 本文详细介绍了Linux系统中软链接和硬链接的概念、创建方法及其应用场景。通过实例解释了两者的区别,包括如何防止误删文件及软链接在跨文件系统时的优势。 ... [详细]
  • 目录一、salt-job管理#job存放数据目录#缓存时间设置#Others二、returns模块配置job数据入库#配置returns返回值信息#mysql安全设置#创建模块相关 ... [详细]
  • 本文详细介绍了如何在预装Ubuntu系统的笔记本电脑上安装Windows 7。针对没有光驱的情况,提供了通过USB安装的具体方法,并解决了分区、驱动器无法识别等问题。 ... [详细]
  • Linux系统中Java程序Too Many Open Files问题的深入解析与解决方案
    本文详细分析了在Linux环境下运行的Java应用程序中可能出现的“Too many open files”异常现象,探讨其成因及解决方法。该问题通常出现在高并发文件访问或大量网络连接场景下,对系统性能和稳定性有较大影响。 ... [详细]
  • 本文详细介绍了如何在PHP中进行数组删除、清空等操作,并提供了在Visual Studio Code中创建PHP文件的步骤。 ... [详细]
  • 本文介绍如何从JSON格式的文件中提取数据并将其分配给Bash脚本中的变量。我们将探讨具体的命令和工具,帮助你高效地完成这一任务。 ... [详细]
author-avatar
mobiledu2502853397
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有