进程篇——进程汇总

说明
  本文章旨在总结备份、方便以后查询,由于是个人总结,如有不对,欢迎指正;另外,内容大部分来自网络、书籍、和各类手册,如若侵权请告知,马上删帖致歉。
  QQ 群 号:513683159 【相互学习】
内容来源
  《Linux网络编程》、《linux系统编程》

一、进程的相关概念

详细请看概念篇——进程的概念认识
  (1) 进程引入的原因:实现资源共享和程序并发执行
  (2) 程序与进程的概念:程序不是进程,进程是处于执行状态的程序及相关资源的总称
  (3) 进程的组成:程序段、数据段、PCB
  (4) 进程的标识符:PID
  (5) 进程之间的关系:(层次结构:进程树
  (6) 进程的基本状态:新建、就绪、执行、阻塞、退出
  (7) 特殊进程名:僵死进程、鬼魂进程、孤儿进程、守护进程。
  (8) 进程间通信(IPC):管道、消息队列、信号量数组、共享内存
  (9)进程组与会话 :进程组——进程的集合,会话——进程组的集合。
  (10)进程与线程的关系:一个进程中可拥有至少一个线程。

二、获取进程标识符

详细请看【Linux】函数简介篇——获取进程相关ID函数
  相关API
    (1) getpid():获取调用进程的进程ID
    (2) getppid():获取调用进程的父进程的进程ID
    (3) getuid():获取调用进程的实际用户ID
    (4) geteuid():获取调用进程的有效用户ID
    (5)getgid():取调用进程的实际组ID
    (6) getegid():取调用进程的有效组ID
    (7) getpgrp():获取调用进程的进程组ID,即领头进程的PID
    (8) getpgid():获取指定进程pid的进程组ID.

三、进程的产生

  (1)进程的产生过程
    (1) 首先复制其父进程的环境配置。
    (2) 在内核中建立进程结构。
    (3) 将结构插入到进程列表,便于维护。
    (4) 分配资源给此进程。
    (5) 复制父进程的内存映射信息。
    (6) 管理文件描述符和链接点。
    (7) 通知父进程。
  (2)相关API:【表示如何创建新进程】
    1️⃣fork ()vfork():创建新进程。
详细请看【Linux】函数简介篇——进程的创建函数:fork()、vfork()
    2️⃣system():调用“/bin/sh-c command”执行特定命令,阻塞当前进程直到command命令执行完毕。【包含运行】
详细请看【Linux】函数简介篇——进程的创建函数:system()

四、进程的运行

  详细请看【Linux】函数简介篇——进程的运行:exec()系列函数
  (1)相关API:【表示进程中如何将新执行文件载入地址空间
exec()系列:读取可执行文件并载入地址空间开始运行,该序列函数完成相同功能,但参数构造不同。
    1️⃣execl():执行PATH,所有参数在PATH之后,直到一个NULL指针和环境从’environment’
    2️⃣execlp():执行FILE,搜索’ PATH’环境变量,如果它不包含斜杠,所有参数在FILE后面,直到一个NULL指针和环境从’environment’
    3️⃣execle():执行PATH,所有参数都在PATH后面,直到一个NULL指针,之后的参数用于环境
    4️⃣execv():从’ environ’执行带有参数ARGV和environment的PATH。
    5️⃣execvp():执行FILE,搜索’ PATH’环境变量,如果它不包含斜杠,参数ARGV和环境从’ environment ’
    6️⃣execve ():替换当前进程,使用参数ARGV和环境ENVP执行PATH。ARGV和ENVP以NULL指针结束
  (2)函数名的解读
    (1)l 表示参数以列表方式提供。
    (2)v 表示参数以数组[向量]方式提供。
    (3)p 表示用户在PATH环境变量中寻找可执行文件。
    (4)e 表示会提供给新进程以新的环境变量。
  PS
    可使用fork()exec()系列搭配,完成运行可执行程序的新进程。

五、进程的同步

  详细请看【Linux】函数简介篇——进程同步函数
  多个进程之间需要写作完成任务时,经常发生业务之间的依赖现象,从而出现了进程的同步问题。
  Linux下进程的同步方式主要有消息、信号量等。
  信号量是一个共享的表示数量的值。用于多个进程之间操作或者共享资源的保护,它是进程之间同步的最主要方式。
  (1)相关API:【表示进程的层次关系,父进程如何收集后代信息】
    1️⃣wait():等待进程.提供初级的进程同步措施,能使一个进程等待,直到另一个进程结束为止,常用于获取(释放)僵死子进程的信息。
    2️⃣waitpid():等待特定进程。
    3️⃣waitid():等待特定进程(更多选项)。
    4️⃣sleep():进程休眠。

六、进程的终止

  (1)终止方式:(①~⑤正常终止, ⑥~⑧异常终止, ⑨~⑩设置终止调用函数)
    ① return语句:从main()返回。
    ② exit()函数:执行一些基本的终止进程步骤后,通知内核终止这个进程
    ③ _exit() 或_Exit()函数:用STATUS的低阶8位终止程序执行(无需运行终止处理程序或信号处理程序而终止的方法)
    ④最后线程从其启动例程返回:线程返回值不会作为进程返回值,进程返回值为0
    ⑤最后线程调用pthread_exit()函数:与上一个一样,进程返回值为0
    ⑥ abort()函数:进程异常终止.(产生SIGABRT信号)
    ⑦ 接收信号终止
    ⑧最后线程对取消请求作出响应
    ⑨ atexit()函数:结束调用回调函数(原型:void function(void);
    ⑩ on_exit()函数:结束调用回调函数(原型:int function(int status, void *arg);
  (2)相关API:【表示进程的消亡】
  详细请看【Linux】函数简介篇——进程终止函数
    ①exit()——执行清理工作后,通知内核关闭进程。
    ②_Exit()——立即通知内核关闭进程。
    ③_exit()——立即通知内核关闭进程。
    ④atexit()——进程结束调用终止处理程序。(一参)
    ⑤on_exit()——进程结束调用终止处理程序。(两参)
    ⑥abort()——异常终止

七、进程的通信

  详细请看进程篇——进程间通信(IPC)汇总
  Linux下多进程间的通信机制叫做IPC,是多个进程间进行相互沟通的一种方式。
  进程之间的通信有多种方式,如:
  1. 管道
    利用内核在两个进程之间建立通道,特点是与文件的操作类似,仅在管道的-一端只读,另一端只写,利用读写的方式在进程之间传递数据。
  2. 消息队列
    内核地址空间中的内部链表,每个消息队列可用IPC标识符唯一的进行标识,不同的消息队列之间是相对独立的。每个消息队列中的消息,又构成一个独立的链表。
  3.信号量数组
    一种计数器,用来控制对多个进程共享的资源所进行的访问。
  4.共享内存
    将内存中的一段地址,在多个进程之间共享。多个进程利用获得的共享内存的地址来直接对内存进行操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值