基于Linux的进程编程 | C/C++

本文详细探讨了Linux下的进程编程,包括进程基本概念、进程组、会话、进程管理(如进程创建、调度、终止、通信)以及信号处理。重点介绍了进程间通信的各种方式,如管道、信号量、共享内存、套接字等,并提到了进程池和一些操作系统接口的知识。
摘要由CSDN通过智能技术生成

一、进程的基本概念

1.进程的定义

进程是描述程序执行过程和资源共享的基本单位

主要目的:控制和协调程序的执行

2.linux下进程相关函数

用户与组ID:参阅上一讲:https://blog.csdn.net/qq_38801934/article/details/103142068

创建进程:system(),fork(),exec()

终止进程:kill()

等待进程终止:wait(),waitpid()

3.进程组

由一个或者多个相关进程组成,目的是为了进行作业控制。

进程组的主要特征:信号可以发送给进程组中的所有进程,并使该进程组中的所有进程终止、停止或运行。

每个进程组都属于某个进程组

4.进程组函数

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

  • 返回pid进程的进程组ID;若pid为0,则返回当前进程的进程组ID;出错时返回-1,并设有errno值。

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

  • 若pid为0,则使用调用者PID;若pgid为0,则将pid进程的进程PID设为进程组ID;成功时返回0,出错时返回-1,并设errno值。
5.会话(session)
  • 会话为一个或多个进程组的集合,包括登录用户的全部活动,并具有一个控制终端
  • 登录进程为每各用户创建一个会话,用户登录shell进程成为会话首领,其PID设为会话ID
  • 非会话首领进程通过调用setid()函数创建新会话,并成为首领

进程组函数

获取会话ID:pid_t getsid(pid_t pid);

  • 返回pid进程的会话ID;若pid为0,则返回当前进程会话ID;成功时返回会话ID,出错时返回-1,并设errno值。

设置会话ID:pid_t setsid();

  • 成功时返回新创建的会话ID,出错时返回-1,并设errno值

二、信号(signal):是一种进程通讯机制

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

系统信号

  • 系统信号缺省时处理逻辑:终止进程;生成内核转储文件;忽略
  • 使用“kill -l”命令可查看操作系统支持的信号列表,不同的系统可能有所不同。

进程间发送的信号

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

信号处理

  • 进程接受到信号之后,根据信号配置进行处理
  • 缺省配置:在程序没有处理时,确定该信号如何处理
  • 程序处理信号的方式:按照信号处理例程提供的函数指针来调用它所指定的函数
  • sigaction()函数:设置信号配置(需要的时候再详细了解)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值