目录
进程的概念
程序的一个执行实例,启动一个软件,本质上是启动一个进程
linux中,运行命令,也是创建一个进程,内核上的说法是担任分配系统资源的实例
每次调用程序,都会创建一个新的进程
一个作业任务的完成可由多个进程组成,且必须至少由一个进程组成
程序是静态的,而进程是动态的。
进程的描述pcb
文件 = 内容 + 属性
进程 = 对应的代码和数据 + 进程对应的pcb结构体
pcb(process control block)进程控制块,是一个结构体
task_struct是linux下描述进程的结构体
查看进程
方式一:
ps -l 查看当前进程
ps -axj 查看所有进程
方式二:
ls /proc 查看所有进程文件
ls /proc/pid 查看对应进程的文件,其中有些文件是每个进程都会具有的
父子进程
pid_t 是无符号整型
getpid() 获取子进程
getppid() 获取父进程
头文件:
#include <sys/types.h>
#include <unistd.h>
只需要包含其中一个
所有的函数只能在进程中才能被调用
kill -9 pid 可以关掉进程
killall 名称 关掉所有和名称有关的进程
每次登录都有不同的shell进程
fork函数创建父子进程
头文件是 #include <unistd.h>
返回值pid_t 无符号整型
子进程返回0,父进程返回子进程pid,出错返回-1
使用后会变成两个进程,一个父进程,一个子进程
进程状态
进程状态查看
ps -l 查看当前的进程
ps ajx 查看所有进程
进程状态
R(running):运行状态
S(sleeping):阻塞状态,可中断
D(disk sleep):书面状态,磁盘状态,深度睡眠,不可被中断,不可以被被动唤醒
T(stopped):暂停状态
(睡眠和暂停区别,睡眠等待资源,暂停为了调试)
t(tracing stop):调试状态
Z(zombie):僵尸状态,一个进程已经退出,但是还不允许被os释放,处于一个被检测的状态-僵尸状态(一般是父进程或os检测)
X(dead):dead终止状态(具有瞬时性)
+前台进程(启动后,是的命令无效,命令行解释器无效,可以使用ctrl + c取消)
./文件 & (后台进程)
Z——僵尸进程
概念:一个子进程已经退出,但是还不允许被os释放,处于一个被检测的状态-僵尸状态(一般是父进程或os检测),此时会一直等待父进程读取退出状态代码
危害:内存泄露,pcb一直需要维护子进程
孤儿进程
概念:
父进程退出,子进程还在,子进程就叫做孤儿进程!
孤儿进程会被1号进程领养(init,系统本身)
进程的优先级
概念:cpu资源分配的先后顺序
pri:代表被执行的优先级,值越小越早被执行
ni(nice):优先级的修正数据(值-20 - 19)
pri(new) = pri(old) + nice
更改pri:进入top后按“r”->输入进程pid->输入nice值
普通用户修改优先级只能往低的调,调高要sudo
其他概念
竞争性:系统进程数量多,而cpu只有少量或者只有一个,所以进程中具有竞争属性,有了优先级
独立性:多进程运行,共享资源,多进程之间互不干扰
并行:多个进程在多个cpu下运行,成为并行
并发:多个进程在一个cpu下采用进程切换方式,使得一段时间内,多个进程都能够进行运行,称为并发
时间片:os会给每个进程设置一个时间段提供运行,过来这段时间,这个进程就会被强制下线
抢占和出让:进程会根据优先级强制将前面还没有完成时间片的进程下线,或者出让给优先级高的进程
上下文数据:寄存器中的临时数据,叫做a的上下文数据,上下文数据不能够被丢弃
切换:如果进程a正在被运行,cpu内的寄存器里面,一定保存的是进程A的临时数据,当进程a被切换下来时候,进程a需要带走自己的上下文数据,为了下次回来时候,能够恢复,继续按照之前的逻辑运行