我们首先来看进程的基本概念
什么叫进程呢
一个进程process
它是描述程序执行过程
和资源共享的一个基本单位
你分配资源 你执行这个程序
那么你共享资源
所有的控制和管理
这个程序运行的那些东西
都需要使用一个特殊的数据结构
来存储它 保存它 维护它 管理它
这个东西就叫进程
它的最主要的一个目的
就是控制和协调
我们整个程序的执行过程
在Linux的操作系统中
它提供了一系列的和进程相关的函数
那些用户和组ID相关的函数
我们在上一讲里面已经给大家展示过了
我们就不讨论它们了
在这一讲里 我们着重要讨论的
就是一些跟进程创建 终止
相关的一些函数 包括system()
包括fork()、exec()、kill()、
wait()、waitpid()等等
这些函数都是非常重要的
进程管理函数
我们都需要知道的
在Linux操作系统中
一个或多个相关的进程
可以构成一个进程组
进程组的最主要的目的
是为了进行作业控制
它的最根本的特征就是
信号可以发送给这个进程组中的
所有的进程
并且你能够
让这个进程组中的所有进程
同时地终止
停止或者继续运行
也就是说你把这些相关的进程
合并成一个组
然后就可以以一个组的模式
对它进行控制和管理
进程组是非常重要的一个概念
在Linux操作系统中
对管理同类型的进程
是非常方便的一个策略
每一个Linux进程
都会从属于某个特定的进程组
这是一定要明确的
进程组同样具有一些特定的函数
和我们的进程ID相关的
用户ID相关的这些函数 一样的
我们不有用户嘛 有用户组
我们就有进程 有进程组
要想获取进程组PID
那就有getpgid()
pgid就是进程组ID
getpgid()
想设置它就有setpgid()这样的函数
还有一个概念跟进程相关的
就是会话session
一个会话
是一个或多个进程组的集合
包括登录用户的全部活动
还有相应的控制终端
合在一块就叫一个session 一个会话
登录进程会为每个用户创建一个会话
用户登录的shell
就会变成这个会话的首领
会话首领的那个进程的ID
就是PID就会变成这个会话的ID
可以调用setsid()这个函数
创建一个新的会话
注意这个函数
只能是非会话的首领才能创建
你原来就是组长
你还想创建一个新的组
再自认组长
这个模式
在Linux系统下边就不太妥当
不能身兼数职 这个是不妥当的
在Linux系统下面
你本来不是leader
你就创建一个新的会话
然后自己就能升级为首领了
setsid()这个函数 做的就这个事
非会话首领可以自立门户
创建一个新的会话
自己成为leader 成为首领
会话ID可以获取 也可以设置
getsid()、setsid()就这两个函数