进程的基本概念

  • 进程是描述程序执行过程和资源共享的基本单位
  • 主要目的:控制和协调程序的执行

进程相关函数

  • 用户与组ID函数
  • 创建进程:system(),fork(),exec()
  • 终止进程:kill()
  • 等待进程终止:wait(),waitpid()

进程组

  • 定义:由一个或多个相关联的进程组成,目的是为了进行作业控制
  • 进程组的主要特征:信号可以发送给进程组中的所有进程,并使该进程组中的所有进程终止,停止,或者继续运行
  • 每个进程都属于某个进程组

进程组函数

  获取进程组ID:pid_t getpgid(pid_t pid);

  设置进程组ID:int setpgid(pid_t pid ,pig_t pgid);

会话(session)

  • 会话为一个或多个进程组的集合,包括登录用户的全部活动,并具有一个控制终端
  • 登录进程为每个用户创建一个会话,用户登录shell进程成为会话首领,其PID设为会话ID
  • 非会话首领进程通过调用setsid()函数创建新会话,并成为首领

进程组函数

  • 获取会话ID:pid_t getsid(pid_t pid);
  • 设置会话ID:pid_t setsid();

信号(signal):进程通讯机制

  • 信号是发送给进程的特殊异步消息
  • 当进程接收到信息时立即处理,此时并不需要完成当前函数调用甚至当前代码行
  • Linux系统中有多种信号,各具备不同的意义;系统以数字标识不同的信号,程序一般以名称引用之

系统信号

  缺省处理逻辑:终止进程,生成内核转储文件

  使用kill -l命令可查看操作系统支持的信号列表,不同的系统可能有所不同

进程间发送的信号

  • SIGTERM,SIGKILL:终止进程信号,前者是请求(接收信号的进程可以忽略之),后者是强制
  • SIGUSR1,SIGUSR2:用户自定义信号,可用于向进程发送命令

信号处理

  进程接收到信号后,根据信号配置进行处理

  缺省配置:在程序没有处理时,确定信号该如何处理

  程序处理信号的方式,按照信号处理例程的函数指针定义一个函数,然后调用

  sigaction()函数:设置信号配置

  

处理信号时的注意事项:

  • 信号是异步操作,当处理信号时,主程序非常脆弱
  • 信号处理例程应该尽可能的短小,它甚至会被新信号中断
  • 尽量不要在信号例程中实施I/O操作,也不要频繁调用系统函数或者库函数
  • 在信号处理例程中进行复杂的赋值操作也是危险的,它可能不是原子操作,因而在可能在执行时被中断
  • 如果需要赋值,使用sig_atomic_t 类型的全局变量(在Linux中等价于int,即允许整数或指针赋值,更大尺寸数据不允许)
#include <signal.h>//处理信号的头文件
#include <string.h>
#include <sys/types.h>
#include <unistd.h>
#include <iostream>
sig_atomic_t sigusr1_count = 0;
extern "C" {void OnSigUsr1(int signal_number) { ++sigusr1_count; }}
int main()
{std::cout << "pid:" << (int)getpid() << std::endl;struct sigaction sa;memset(&sa, 0, sizeof(sa));sa.sa_handler = &OnSigUsr1;sigaction(SIGUSR1, &sa, NULL);sleep(100);//在终端中输入kill -s SIGUSR1 pid,信号计数器将递增std::cout << "SIGUSR1 counts:" << sigusr1_count << std::endl;return 0;
}

转载于:https://www.cnblogs.com/hujianglang/p/6266884.html

C++学习笔记39:进程概念相关推荐

  1. 冰冰学习笔记:进程概念

    欢迎各位大佬光临本文章!!! 还请各位大佬提出宝贵的意见,如发现文章错误请联系冰冰,冰冰一定会虚心接受,及时改正. 本系列文章为冰冰学习编程的学习笔记,如果对您也有帮助,还请各位大佬.帅哥.美女点点支 ...

  2. Docker:学习笔记(1)——基础概念

    Docker:学习笔记(1)--基础概念 Docker是什么 软件开发后,我们需要在测试电脑.客户电脑.服务器安装运行,用户计算机的环境各不相同,所以需要进行各自的环境配置,耗时耗力.为了解决这个问题 ...

  3. 利用计算机技术实现对文本篇章,自然语言处理NLP学习笔记一:概念与模型初探...

    前言 先来看一些demo,来一些直观的了解. 自然语言处理: 可以做中文分词,词性分析,文本摘要等,为后面的知识图谱做准备. 知识图谱: 还有2个实际应用的例子,加深对NLP的理解 九歌机器人: 微软 ...

  4. HTML/CSS学习笔记01【概念介绍、基本标签】

    w3cschool菜鸟教程.CHM(腾讯微云):https://share.weiyun.com/c1FaX6ZD HTML/CSS学习笔记01[概念介绍.基本标签.表单标签][day01] HTML ...

  5. linux系统管理学习笔记之八---进程与作业的管理

    linux系统管理学习笔记之八---进程与作业的管理 2010-01-05 13:00:42 标签:linux 进程 [推送到技术圈] 版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 ...

  6. 网络流算法学习笔记——最大流问题基本概念和Ford-Fulkerson方法(标号法C++实现)

    屈婉玲<算法设计与分析>第2版第7章网络流算法学习笔记. 基本概念 最大流问题,相当于有从s到t的供水系统,每段路径都有限定流量,除了s.t两地外,每个中间点都不能滞留,从s流入多少,就从 ...

  7. 迅为嵌入式Linux学习笔记4——进程

    迅为嵌入式Linux学习笔记4--进程 进程指的是正在运行的程序,是操作系统分配资源的最小单位. 进程ID 每个进程都有唯一的标识符,这个标识符就是进程ID,简称pid 进程间通信的方法 管道通信:分 ...

  8. TCP/IP详解学习笔记(1)-基本概念

    为什么会有TCP/IP协议 在世界上各地,各种各样的电脑运行着各自不同的操作系统为大家服务,这些电脑在表达同一种信息的时候所使用的方法是千差万别.就好像圣经中上帝打乱了各地人的口音,让他们无法合作一样 ...

  9. 冰冰学习笔记:进程控制

    欢迎各位大佬光临本文章!!! 还请各位大佬提出宝贵的意见,如发现文章错误请联系冰冰,冰冰一定会虚心接受,及时改正. 本系列文章为冰冰学习编程的学习笔记,如果对您也有帮助,还请各位大佬.帅哥.美女点点支 ...

  10. 认知无线电学习笔记1 物理层概念

    认知无线电学习笔记1 认知无线电物理层基础 Physical architecture of the cognitive radio PHY LAYER: 频谱感知(侦听) 接入技术 Radio fr ...

最新文章

  1. RNN 扫盲:循环神经网络解读及其 PyTorch 应用实现
  2. Store Kit Guide(In App Purchase)翻译
  3. 网络编程基础之C/S架构和TCP/IP协议
  4. python如何使用字典_python字典怎么使用zip
  5. crash recovery mysql_InnoDB crash recovery 完整过程
  6. pku2503 Babelfish
  7. Python 新浪微博 各种表情使用频率
  8. 如何模拟POST/PUT/DELETE等请求进行在线HTTP接口测试?
  9. mysql查询,left join(求并集),where(求交集)
  10. Android服务注册完整过程源码分析
  11. php中使用PHPExcel读写excel(xls)文件的方法
  12. jQuery最新1.4 版本的十五个新特性
  13. 计算机组成与系统 报告,计算机组成与系统结构课设报告.docx
  14. Java二十三设计模式之-----桥接模式
  15. oracle regexp
  16. 通信电子线路实验-调幅模块仿真(发送与接收)
  17. 【动画演示软件】Focusky教程 | 如何使插入的视频自动播放?
  18. 堪萨斯大学计算机硕士,堪萨斯大学计算机专业设置及申请条件汇总 你get到了吗?...
  19. 使用SPSS对数据异常值进行探索分析
  20. 安全漏洞防御(8) DDOS 攻击的防范教程

热门文章

  1. PS网页设计教程——小贴士:在PS中创建复古的页面
  2. HIT Software Construction Review Notes(3-1 Data Type and Type Checking)
  3. 【零基础学Java】—类的定义(七)
  4. 【Vue2.0】— 全局事件总线GlobalEventBus(十九)
  5. express怎么读取html,Express 配置HTML页面访问的实现
  6. IntelliJ IDEA连接mysql
  7. 我想在杭州买一套房一百平米左右的房子大概多少钱?
  8. 高级教师和一级教师最大的差异是什么?
  9. 营销任何产品都只解决2个功能
  10. 做生意、做营销常犯的10个错误和对策