目录
一.基本概念
启动一个软件,本质就是启动了一个进程
例如,在Linux下运行了一条命令,运行时,其实就是在系统层面创建了一个进程
平时我们都在说,把代码编译好,然后把程序运行一下,其实这种说法是错的!当程序需要运行时,系统会将程序加载到内存,而程序加载到内存准备运行的那一时刻,它就是一个进程了!所以不是把程序运行起来,而是把进程运行起来。
只有将程序加载进内存,形成进程之后,才能被操作系统管理,操作系统只能对进程做调度
二.系统如何管理进程
Linux是可以同时加载多个程序的,Linux是可能同时存在大量进程在系统中的。
那Linux系统就一定会将这些进程管理起来,如何管理:先描述,再组织
这里所谓的先描述,就是由程序的属性,创建出的进程PCB
再组织,就是将所有的PCB以链表等数据结构组织起来,对进程的管理,就变成了对PCB链表的增删查改
进程 = 对应的代码和数据 + 进程对应的结构体
补充几点:
程序(本身就是文本)是静态的
进程(本身就是进程加载到内存后,要在内存中被CPU处理)是动态的
进程与程序并不是一一对应的,因为同一个程序可以同时被执行多次
进程与作业并不是一一对应的,一个作业至少要包含一个进程,可能由多个进程组成一个作业
三.PCB
1.PCB的概念
PCB(process control block):进程控制块
PCB的本质是一个结构体
不同的操作系统中PCB的名字不同
Linux中,PCB名为 struct task_struct
2.task_struct概念
在Linux中描述进程的结构体被叫做task_struct
task_struct是Linux内核的一种结构体,它会被装载到RAM(内存)里并且包含进程属性信息
可以在内核源代码里找到,所有运行在系统里的进程都以task_struct双链表的形式在内核里
3.task_struct内容分类
四.查看进程
1.可以通过 /proc系统文件查看
例如:要获取PID为1的进程信息,需要查看/proc/1这个文件
指令:ls -l /proc/1
例如:查看所有进程
指令 ls /proc
2.ps
指令:ps/ps -l,只能查看当前终端下且是我自己的进程
指令:ps -a/ps -al,查看所有终端下自己的进程
指令:ps axj,查看所有终端所有进程
3.top
相当于windows下的任务管理器,并不常用
五.系统调用获取进程标识符
1.getpid() —— 获取进程代号
2.getppid() —— 获取这个进程的父进程代号
必须包含两个头文件,其返回值pid_t本质是int类型