进程:程序在内存中的一个实例。
Linux进程控制块(PCB描述进程)
Linux操作系统:多个进程,多个PCB,方便管理(组织起来),调度一个执行。
进程(虚拟地址):
命令行参数和环境变量
栈
共享映射区
堆
未初始化的全局变量
静态变量
已初始化程序变量
代码段
指令是一个个程序,敲指令是在执行程序(找到程序,执行(创建子进程去做))。
父进程在创建子进程时会复制一份环境变量给子进程,但此后二者的环境变量互不影响。
进程优先级:优先级不是得到得不到表现,是描述得到某种资源的先后顺序。
进程得到CPU资源,优先级更多表现在运行中。
进程状态:运行,就绪,僵死,新建,挂起,终止,阻塞等状态。
sleep:线程,进程正常sleep,可被唤醒。
disk sleep:深度睡眠,不可中断进程(eg:植物人),杀不了,唤不醒,只能关机重启。
ps axu ps axu | head -n1
ps(显示进程)
a(所有)
xu(控制输出)
kill -l 显示当前系统信号类别
PCB:PID标识符
如何创建一个进程?
#include<unistd.h>
pid_t fork(void)
子进程拷贝父进程的代码和数据,进程拥有自己的独占资源(写时拷贝),不会写入代码(父,子进程共享代码区),不共享数据区(私有化),当你要写时,私有一空间,别人不访问。
成功给父进程返回子进程PID,给子进程返回0,失败,-1被返回给父进程。子进程找到父进程方法是唯一的,父进程找到子进程不唯一。
创建后,优先级(调度算法)决定谁先运行。(不确定,确定谁推出)。
读取进程退出状态,判断是否有效完成任务,Z状态存在意义。
进程优先级:进程CPU资源分配就是进程优先级。
进程一旦运行,其优先级不能改了(不公平),nice级可改,老优先级+nice值。
-20~19 nice值
nice -n -5 proc,优先级变为75父进程
top命令,相当于任务管理器。
写时再映射,缺页中断(写时拷贝),代码共享,数据独立的,所以子进程,父进程分流进子进程入else if 和else.
fork()和execve()子进程去执行,进程控制,程序计划,(自己写shell命令行解释器)
孤儿进程:一个父进程退出,而它的一个或多个子进程还在运行,那么这些子进程将称为孤儿进程。
僵尸进程:维护退出状态,占资源。
孤儿进程:新父亲读取信息(领养),1号进程:Init(操作系统),0号进程(要被替换,启动之后),不读取状态,会内存泄漏(孤儿进程不释放,一直处于僵尸状态)。
线程是一个进程的执行分支。