进程
程序:代码+数据
进程: 代码+数据+堆栈+pcb
程序:为了完成特定任务的有序指令集合
- UNIX标准定义:一个其中运行着一个或者多个线程的地址空间和这些线程所需要的系统资源
- 进程之间共享代码(当他们运行同一个程序时才会共享代码)和系统函数库
- 进程编号pid:系统会给每个进程分配一个唯一的数字编号称为进程标识符或者PID(pid也是进程表的索引)
- pid的范围一般是2-32768(1号进程是init负责管理其他进程)
- ps指令查看进程
- 进程之间独有:
- 栈空间:用于保护函数中的局部变量和控制函数的调用返回
- 环境空间:专门为这个函数建立的环境变量
- 程序计数器:这个程序计数器用来记录它执行到的位置,即执行线程中的位置
- 进程表:是一个数据结构表,把当前加载到内存中所有进程的有关信息保存在一个表中,进程表中包括
- 标识符:描述本进程的唯一标识符,用来区分其他进程
- 状态:任务状态,退出代码,退出信号
- 优先级:相对于其他进程的优先级(linux中采用的是强占式多任务处理,nice值决定优先级,nice值越高优先级越低)
- 程序计数器:包括程序代码和相关数据的指针,还有与其他进程共享的内存块指针
- 上下文信息:进行执行时处理时,寄存器中的数据
- i/o状态信息:包括显示的i/o请求,分配给进程的i/o设备和被进程使用的文件列表
- 记账信息:包括处理器时间总和,使用的时钟数总和,时间限制,记账号等(可以知道调度) 其他信息
* 把进程放到后台运行可以使用 ./test & - 进程的状态
- S : 睡眠状态,通常是在等待某个事件的发生,例:一个信号,一个输入等
- R : 运行状态,严格来说是“可运行”状态,即在运行队列中,处于正在执行或者即将运行的状态
- D:不可中断睡眠 (等待)通常是在等待输入或者输出完成
- T :停止状态,可以通过发送SIGSTOP信号给进程来停止进程,这个被暂停的进程可以通过发送SIGCONT信号让进程继续运行
- Z : 死进程或者僵尸进程
- N :低优先级任务
- s :进程是会话期首进程
-
- :进程属于前台进程
- 1 :进程是多线程的
- < : 高优先级的任务
- 优先级
cpu资源分配的先后顺序,就是指进程的优先权,优先权高的进程有优先执行权利。
UID:代表执行者身份-PID:代表这个进程的代号
-PPID:代表这个进程的父进程的代号
-PRI:代表这个进程可被执行的优先级(它的值越小优先级越高)
-NI:代表这个进程的nice值
-详解PRI和NI- PRI:代表这个进程可被执行的优先级,通俗点说就是程序被CPU执行的先后顺序,它的值越小优先级越高
- NI就是我们说的nice值,它可以表示进程可被执行的优先级的修正数值(PRI(new)=PRI(old)+nice),这样当nice的值为负数时,那么该程序的的优先值将会变小,优先级会变高(nice的取值范围在-20到19之间)
并行:多个进程在多嘎CPU下分别,同时进行运行,称为并行
并发:多个进程在一个CPU下采用进程切换的方式,在这一段时间中,让多个进程得以推进,称为并发
环境变量
本地变量:只能在当前进程使用
环境变量:在当前进程和它的子进程中都可以使用
创建新环境变量: export name=val (注意:等号两边不能有空格)
env 获取所有环境变量
echo$环境变量名 打印对应的环境变量值
当前终端设置的环境变量只能在当前终端使用,离开后就没有了
如果想所有的地方都能使用自己配制的环境变量要配置在 ~/.bash_profile中
在程序中获取环境变量方法
- 获取所有的环境变量,main的第三个参数
- 获取某个环境变量: val =getenv(“name”);
在程序中设置环境变量: putenv (“name=value);
## 虚拟地址 ##