什么是进程:
- 用户角度:进程就是程序的一次动态执行过程。
- 内核角度:进程需要占用内存、CPU等系统资源,所以进程是系统资源分配的基本单位。
- 每个进程都有自己的状态、独立的虚拟地址空间、页表、物理内存等资源
- 操作系统需要对进程的现场信息进行维护,就需要相应的数据结构,这个结构体叫作PCB(Process Control Block 进程块控制)。
查看进程方法:
- ls /proc/ //查看进程目录
- ps -ef // 可以通过管道符 | + grep + 函数名/pid(进程ID),进行过滤,查看想要的进程信息
- ps aux
- top // 类似于windows下的任务管理器
- getpid() // 在代码中获取pid
进程状态 :
- 就绪态 // 程序准备运行
- 运行态 // 程序正在运行
- 阻塞态 // 程序没有运行
进程优先级:
在系统中分有两种优先级:
1). 普通优先级;
2). 实时优先级。
按照优先级的值从小到大,优先级也由高到低。即优先级的值越小,优先级越高。优先级越高程序越先执行,当优先级高的程序运行结束时,优先级低的再运行。另外进程的优先级是动态可调整的。
上述两个区别是:当程序优先级相同时,普通优先级下是按照时间片的顺序轮流进行。而实时优先级下是按先运行的先控制CPU,直到该程序放弃控制时,下一个进程在执行。
如何更改优先级:
-
nice 方法:nice -n val ./test 在程序开始执行前指定nice值 方法:nice -n val pid 程序运行时调整优先级
-
renice 方法:renice -n val -p pid 程序运行后调整优先级
-
top 方法:进入top ---> 按“R” ---> 输入程序pid ---> 输入nice值 更改已存在的进程NI
其他概念
竞争性:
系统中运行程序数目较多,而CPU资源很少,程序之间必定存在竞争属性,为了高效
运行,合理竞争资源,便具有了优先级。
独立性:
多进程运行,独享各种资源,进行程序调度,运行期间互不干扰。
并发性:
多进程下多个CPU下,分别同时进行。
并行性:
多进程在一个CPU下,采用进程切换的方式,在一段时间内,对多进程进行推进。
环境变量
环境变量是指在操作系统中用来指定操作系统运行环境的一些参数。
查看环境变量方法
echo $NAME // NAME:所要查看的环境变量名称
环境变量中相关命令:
- echo:显示某个环境变量值
- export:设置一个新的环境变量
- env:显示所有环境变量
- unset:清除环境变量
- set:显示本地定义的shell变量和环境变量
通过代码获取环境变量
- 命令行第三个参数(env):
#include <stdio.h>
int main (int argc, char* argv[], char* env[])
{
int i = 0;
for(; env[i]; i++){
printf("%s \n", env[i]);
}
return 0;
}
- 通过第三方变量environ:
#include <stdio.h>
int main (int argc, char* argv[])
{
extern char **environ;
int i =0;
for(; environ[i]; i++)
printf("%s\n",environ[i]);
return 0;
}
由于libc中定义的全局变量environ指向环境变量表,environ没有包含在任何头文件中,所以使用时要用extern声明。
- 系统调用
- putenv
- getenv
#include <stdio.h>
#include <stdlib.h>
int main ()
{
printf("%s\n", getenv("PATH"));
return 0;
}
可用来访问特定的环境变量。