进程描述
- 进程是一个程序一次执行的过程,它和程序有本质区别。
- 程序是静态的,它是一些保存在磁盘上的指令的有序集合。
- 而进程是一个动态的概念。它是一个运行着的程序,包含了进程的动态创建、调度和消亡的过程,是Linux的基本调度单位。
- 进程是os的最小单元 os会为每个进程分配大小为4g的虚拟内存空间,其中 1g给内核空间 3g给用户空间{代码区数据区 堆栈区}
- 从系统的角度描述进程的变化,是通过进程控制块(PCB)来描述的。进程控制块包含了进程的描述信息、控制信息以及资源信息,它是进程的一个静态描述。
进程标识
OS会为每个进程分配一个唯一的整型ID,做为进程的标识号(pid)。进程除了自身的ID外,还有父进程ID(ppid),所有进程的祖先进程是同一个进程,它叫做init进程,ID为1,init进程是内核自举后的一个启动的进程。init进程负责引导系统、启动守护(后台)进程并且运行必要的程序。
1 2 3 4 5 6 7 8 9 10 |
//进程的pid和ppid可以分别通过函数getpid()和getppid()获得 #include <stdio.h> #include <stdlib.h> #include <unistd.h> int main() { printf("pid:%d ppid:%d\n",getpid(),getppid()); return 0; } |
进程的用户ID和组ID
- 进程在运行过程中,必须具有一类似于用户的身份,以便进行进程的权限控制,缺省情况下,哪个登录用户运行程序,该程序进程就具有该用户的身份
假设当前登录用户为gotter,他运行了ls程序,则ls在运行过程中就具有gotter的身份,该ls进程的用户ID和组ID分别为gotter和gotter所属的组。这类型的ID叫做进程的真实用户ID和真实组ID。真实用户ID和真实组ID可以通过函数getuid()和getgid()获得。
与真实ID对应,进程还具有有效用户ID和有效组ID的属性,内核对进程的访问权限检查时,它检查的是进程的有效用户ID和有效组ID,而不是真实用户ID和真实组ID。缺省情况下,用户的(有效用户ID和有效组ID)与(真实用户ID和真实组ID)是相同的。有效用户id和有效组id通过函数geteuid()和getegid()获得。
1 2 3 4 5 6 7 8 9 |
#include <stdio.h> #include <stdlib.h> #include <unistd.h> int main() { printf("uid:%d gid:%d euid:%d egid:%d\n",getuid(),getgid(),geteuid(),getegid()); return 0; } |
进程的状态
- 进程是程序的执行过程,根据它的生命周期可以划分成3种状态
- 执行态:该进程正在运行,即进程正在占用CPU。
- 就绪态:进程已经具备执行的一切条件,正在等待分配CPU的处理时间片。
- 等待态:进程不能使用CPU,若等待事件发生(等待的资源分配到)则可将其唤醒。
Linux下的进程结构
- Linux系统是一个多进程的系统,它的进程之间具有并行性、互不干扰等特点。也就是说,进程之间是分离的任务,拥有各自的权利和责任
- 其中,每个进程都运行在各自独立的虚拟地址空间,因此,即使一个进程发生了异常,它也不会影响到系统的其他进程。
- Linux中的进程包含3个段,分别为“数据段”、“代码段”和“堆栈段”。
- “数据段”放全局变量、常数以及动态数据分配的数据空间。
- 数据段分成普通数据段(包括可读可写**/只读数据段,存放静态初始化的全局变量或常量)、BSS数据段(存放未初始化的全局变量)以及堆(存放动态分配的数据)
- “代码段”存放的是程序代码的数据**
- ”堆栈段“存放的是子程序的返回地址、子程序的参数以及程序的局部变量等
Linux下的进程管理
- 进程启动
- 手动启动
- 调度启动
ps | 查看系统中的进程 |
top | 动态显示系统中的进程 |
nice | 按用户指定的优先级运行 |
renice | 改变正在运行的进程的优先级 |
kill | 向进程发送信号(包括后台进程) |
crontab | 用于安装、删除或者列出用于驱动cron后台进程的任务 |
bg | 将挂起的进程放到后台执行 |
本文为原创文章,版权归Aet所有,欢迎分享本文,转载请保留出处!
你可能也喜欢
- ♥ Linux 高性能服务器编程:I/O复用二12/12
- ♥ 【Manjaro】Vmware分辨率不能修改03/22
- ♥ Linux 高性能服务器编程:高性能定时器12/18
- ♥ 51CTO:Linux C++网络编程五08/20
- ♥ Linux高性能服务器编程:TCP/IP协议族09/02
- ♥ Linux 信号处理一03/24