文章目录

  • 一、概述
  • 二、进程组与守护进程
    • 1. 进程组
    • 2. 进程组操作函数
    • 3. 会话
    • 4. 守护进程

一、概述

二、进程组与守护进程

1. 进程组

进程组,也称之为作业。BSD于1980年前后向Unix中增加的一个新特性,代表一个或多个进程的集合,每个进程都属于一个进程组。在waitpid函数和kill函数的参数中都曾使用到。操作系统设计的进程组的概念,是为了简化对多个进程的管理。

当父进程,创建子进程的时候,默认子进程与父进程属于同一进程组。进程组ID第一个进程ID(组长进程)。所以,组长进程标识:**其进程组ID其进程ID**

组长进程可以创建一个进程组,创建该进程组中的进程,然后终止。只要进程组中有一个进程存在,进程组就存在,与组长进程是否终止无关。可以使用 kill -SIGKILL -进程组ID(负的) 来将整个进程组内的进程全部杀死。

进程组生存期:进程组创建到最后一个进程离开(终止或转移到另一个进程组)。

一个进程可以为自己或子进程设置进程组ID

2. 进程组操作函数


1)getpgrp函数

  • 获取当前进程的进程组ID
  • 总是返回调用者的进程组ID

2)getpgid函数

  • 获取指定进程的进程组ID
  • 成功:返回进程组ID;失败:-1,设置errno

3)setpgid函数

  • 改变进程默认所属的进程组。通常可用来加入一个现有的进程组或创建一个新进程组。

注意:

  1. 如改变子进程为新的组,应fork后,exec前。
  2. 权级问题。非root进程只能改变自己创建的子进程,或有权限操作的进程

3. 会话

1)创建会话

创建一个会话需要注意以下6点注意事项:

a. 调用进程不能是进程组组长,该进程变成新会话首进程(session header)
b. 该进程成为一个新进程组的组长进程。
c. 需有root权限(ubuntu不需要)
d. 新会话丢弃原有的控制终端,该会话没有控制终端
e. 该调用进程是组长进程,则出错返回
f. 建立新会话时,先调用fork, 父进程终止,子进程调用setsid

2)getsid函数

获取进程所属的会话ID

  • pid为0表示察看当前进程session ID
  • ps ajx命令查看系统中的进程
    • 参数a表示不仅列当前用户的进程,也列出所有其他用户的进程,
    • 参数x表示不仅列有控制终端的进程,也列出所有无控制终端的进程,
    • 参数j表示列出与作业控制相关的信息。

组长进程不能成为新会话首进程,新会话首进程必定会成为组长进程。

3)setsid函数

创建一个会话,并以自己的ID设置进程组ID,同时也是新会话的ID。

调用了setsid函数的进程,既是新的会长,也是新的组长。

总结:

  • 会话:进程组的更高一级,多个进程对应一个会话。
  • 进程组:多个进程在同一个组,第一个进程默认是进程组的组长。
  • 创建会话的时候,组长不可以创建,必须是组员创建。
  • 创建会话的步骤:创建子进程,父进程去死,子进程自当会长。

4. 守护进程

Daemon(精灵)进程,是Linux中的后台服务进程,通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。一般采用以d结尾的名字

Linux后台的一些系统服务进程,没有控制终端,不能直接和用户交互。不受用户登录、注销的影响,一直在运行着,他们都是守护进程。如:预读入缓输出机制的实现;ftp服务器;nfs服务器等。

创建守护进程,最关键的一步是调用setsid函数创建一个新的Session,并成为Session Leader。

  • 创建守护进程模型:

1)创建子进程,父进程退出

所有工作在子进程中进行,形式上脱离了控制终端

2)在子进程中创建新会话

setsid()函数使子进程完全独立出来,脱离控制

3)改变当前目录为根目录

chdir()函数防止占用可卸载的文件系统也可以换成其它路径

4)重设文件权限掩码

umask()函数防止继承的文件创建屏蔽字拒绝某些权限增加守护进程灵活性

5)关闭文件描述符

继承的打开文件不会用到,浪费系统资源,无法卸载开始执行守护进程核心工作守护进程退出处理程序模型

总结:

守护进程的步骤:

a. 创建子进程fork
b. 父进程退出
c. 子进程当会长 setid
d. 切换工作目录 $HOME
e. 设置掩码 umask
f. 关闭文件描述符 0, 1, 2,为了避免浪费资源
g. 执行核心逻辑
h. 退出


没创建家目录下的log,所以改成了家目录

Linux C/C++编程之(十九)进程组守护进程相关推荐

  1. linux 会话 进程组 守护进程

    Linux 下每个进程都会有一个非负整数表示的唯一进程 ID ,简称 pid . Linux 提供了 getpid 函数来获取 进程的 pid ,同时还提供了 getppid 函数来获取父进程的 pi ...

  2. [笔记]Windows核心编程《十九》DLL基础

    系列文章目录 [笔记]Windows核心编程<一>错误处理.字符编码 [笔记]Windows核心编程<二>内核对象 [笔记]Windows核心编程<三>进程 [笔记 ...

  3. 【linux草鞋应用编程系列】_2_ 环境变量和进程控制

    一. 环境变量 应用程序在执行的时候,可能需要获取系统的环境变量,从而执行一些相应的操作. 在linux中有两种方法获取环境变量,分述如下. 1.通过main函数的参数获取环境变量 main函数的多种 ...

  4. 【Linux系统编程】特殊进程之守护进程

    00. 目录 文章目录 00. 目录 01. 守护进程概述 02. 守护进程查看方法 03. 编写守护进程的步骤 04. 守护进程代码 05. 附录 01. 守护进程概述 守护进程(Daemon Pr ...

  5. CSDN 编程竞赛十九期题解

    竞赛总览 CSDN 编程竞赛十九期:比赛详情 (csdn.net) 竞赛题解 题目1.幼稚班作业 幼稚园终于又有新的作业了.老师安排同学用发给同学的4根木棒拼接成一个三角形.当然按照正常的逻辑,如果不 ...

  6. 《UNIX环境高级编程》笔记 第十三章-守护进程

    1. 概念 守护进程(daemon)是生存期长的一种进程.它们常常在系统引导装入时启动,仅在系统关闭时才终止.因为它们没有控制终端,所以说它们是在后台运行的. Linux的大多数服务就是用守护进程实现 ...

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

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

  8. Linux | 进程概念、进程状态(僵尸进程、孤儿进程、守护进程)、进程地址空间

    文章目录 进程和程序 操作系统如何控制和调度程序 进程控制块–PCB 子进程 进程状态 僵尸进程 孤儿进程 守护进程(精灵进程) 进程地址空间 引言 页表 进程和程序 程序: 一系列有序的指令集合(就 ...

  9. python并发编程之semaphore(信号量)_浅谈Python并发编程之进程(守护进程、锁、信号量)...

    前言:本博文是对Python并发编程之进程的知识延伸,主要讲解:守护进程.锁.信号量. 友情链接: 一.守护进程(daemon) 1.1 守护进程概念 首先我们都知道:正常情况下,主进程默认等待子进程 ...

最新文章

  1. 智能车竞赛提问回复-2021-3-25
  2. python3练习题:1-10
  3. 【PC工具】速度最快的的文件搜索工具:everything
  4. 20211217 为什么正定矩阵的主子式都是正的?(注意是主子式,不止是顺序主子式)
  5. 02.iOS开发网络篇—HTTP协议
  6. 如何在项目启动时就执行某些操作
  7. 一台电脑同时运行多个tomcat配置方法
  8. 通过RADIUS 服务器管理无线AP的VLAN
  9. redisTemplate进行自增操作例子
  10. javascript中动态添加事件!!
  11. 【LeetCode笔记】128. 最长连续序列(Java、哈希表、动态规划)
  12. python cgi库_《Python 数据库 GUI CGI编程》
  13. CNNIC公告称半个月已处理不良网站域名万例
  14. 程序员有成立工会的理由吗?
  15. C语言:对包含10个整数的数组进行如下的操作,从下标为0的元素开始到最后一个元素,依次向前移动一个位置。
  16. Atitit 2016 技术趋势与没落技术 目录 1.1. 流水线 即代码通过编码而非配置CI/CD运行工具的方式,来定义部署 流水线 1 1.2. 将APIs当作产品 1 1.3. 无服务器架构
  17. 平衡二叉树的插入与删除
  18. 微信小程序开发工具的目录结构
  19. 据称:韩乔生老师最牛的一次解说――-那是相当的经典!
  20. NUnit2.0详细使用方法 选择自 cyp403 的 Blog

热门文章

  1. Spring之依赖注入源码解析
  2. 树梅派+starrtc配置
  3. ipmitool工具的使用
  4. flutter开发桌面应用_Flutter应用开发十大公司
  5. 2022-3-27学习博客
  6. MySql中对应字段属性为int取出来却为Long
  7. 使用腾讯企业邮箱配置免费域名邮箱
  8. 【Oscp备考-Kioptrix2】
  9. 在STM上用PWM波形实现2个 LED呼吸灯
  10. Mysql按日、周、月进行分组统计