一、进程优先级
1、优先级概念
2、优先级特点
Linux 给我们提供了修改 进程 优先级的权限,目的就是让我们对多任务运行进行合理处理,提高系统运行效率。
注意:(1)进程的nice值不是进程的优先级,他们不是一个概念,但是进程nice值会影响到进程的优先级变化;(2)可以理解nice值是进程优先级的修正修正数据。
3、修改Linux下的优先级
(2) 输入 r
(3) 输入进程的 id
(4)输入 NI 值(例如:NI = -10)
结果:PRI(新的) = PRI(旧的) + NI(-10) = 70
注意:普通用户无法直接修改NI的值,必须切换成root用户或者使用sudo提权执行top指令。
二、进程切换
1、进程特性
2、进程切换
(1) 一个CPU里面存在一套硬件寄存器,寄存器分为用户可见的寄存器,用户不可见的寄存器。
(2) 计算机调度某个进程时,CPU 会把这个进程的 PCB 地址加载到某个寄存器,也就是说,CPU内有寄存器可以只找到进程的PCB地址。
(3) CPU里有一个 eip 寄存器(PC指针),指向当前执行指令的下一条指令的地址。
(4) 当进程在运行的时候,一定会产生非常多的临时数据,这些临时数据只属于当前进程,虽然CPU内部只有一套寄存器硬件,但是寄存器里面保存的数据是属于当前进程的,寄存器硬件和寄存器内的数据是两码事。
(5) 进程在调度的时候占有CPU,但是却不是一直占有到进程结束,进程都有自己的时间片!因为时间片的存在,进程会出现没有被执行完就被拿下去的情况。
(6) 在进程重新被CPU调度的时候,CPU必须知道上一次这个进程运行到哪,当进程被换下去的时候,进程的运行信息会被存在操作系统里面,以便下次CPU重新调度时进程能够正常运行,这叫做进程的上下文保护。当进程被CPU重新调度上来时,首先要做的第一件事情就是读取操作系统中进程运行的相关数据,这叫做进程的上下文恢复。
三、环境变量
1、基本概念
2、常见环境变量
3、查看环境变量方法
我们可以通过指令 echo $NAME 来查看当前环境变量信息(NAME :环境变量名)
//查看用户信息
echo $USER
//查看PATH环境变量
echo $PATH
4、PATH环境变量
注意:我们不能直接写成这样:export PATH=/home/xqh/dir,这样会导致把系统默认的环境变量PATH覆盖掉,我们默认的那些指令就不能直接使用了,只能通过指定路径的方式来使用(关掉Xshell,重新打开,就恢复了)。
5、和环境变量相关的命令
2、也可以通过set 指令来查看环境变量表,不过还会多很多信息,包括本地环境变量等。
环境变量 具有全局属性,可以供所有子进程共享,倘若我们不想让 环境变量 被共享,可以设置本地变量。
现在的 TEST 环境变量是不被子进程共享的。
想让 TEST 进入 环境变量表,只用加上 export 关键字。
6、环境变量的组织方式
7、通过代码如何获取环境变量
我相信大家心中想的 main 函数是无参的形式,实际上main函数是可以传参的,并且最多可以传 3 个参数。
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
int main(int argc, char* argv[], char* env[])
{
int i = 0;
for (; env[i]; i++)
{
printf("%sn", env[i]);
}
return 0;
}
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
int main(int argc, char* argv[])
{
extern char** environ;
int i = 0;
for (; environ[i]; i++)
{
printf("%sn", environ[i]);
}
return 0;
}
注意:libc 中定义的全局变量 environ 指向环境变量表,environ 没有包含在任何头文件中,所以在使用时要用 extern 声明。
8、通过系统调用获取或设置环境变量
#include <stdio.h>
#include <stdlib.h>
int main()
{
char* env = getenv("PATH");
printf("%sn", env);
return 0;
}
通过以上运行,可以看到既可以用函数 getenv() 来获取,也可以使用 echo $环境变量名 来获取。
9、环境变量通常是具有全局属性的
- 环境变量通常具有全局属性,可以被子进程继承下去。
#include <stdio.h>
#include <stdlib.h>
int main()
{
char* env = getenv("MYENV");
if (env)
{
printf("%sn", env);
}
return 0;
}
运行如下:
然后,导出环境变量 export MYENV=”hello world” ,此时再次运行程序,发现有结果了!
说明:环境变量是可以被子进程继承下去的!
本文要是有不足的地方,欢迎大家在下面评论,我会在第一时间更正。
老铁们,记着点赞加关注!!!
原文地址:https://blog.csdn.net/m0_63198468/article/details/131344299
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_44198.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!