[Linux]命令行参数和进程优先级
文章目录
- [Linux]命令行参数和进程优先级
- 命令行参数
- 命令行参数的概念
- 命令函参数的接收
- 编写代码验证
- 进程优先级
- 进程优先级的概念
- PRI and NI
- 使用top指令修改nice值
命令行参数
命令行参数的概念
命令行参数是指用于运行程序时在命令行输入的参数。
命令函参数的接收
C语言中main函数有两个参数用于接收命令行参数,分别是argc和argv,main函数的参数即使没有显式说明,编译器也会自动在编译是添加并且接收参数,只是不显式说明无法使用参数:
int main(int argc, char *argv[]);
在运行程序时需要在命令行输入参数,参数的本质就是字符串,在传入main函数前会以空格作为分割,然后分别传入。argc参数记录传入的参数个数,argv参数记录每一个参数的地址:
编写代码验证
编写如下代码验证main函数接受命令行参数:
#include <stdio.h>
int main(int argc, char *argv[])
{
int i = 0;
for (i = 0; i < argc; i++)
{
printf("argv[%d]->%s\n", i, argv[i]);
}
return 0;
}
编译成功后进行测试:
补充: 正是因为main函数能够接收命令行参数,才实现了使用Linux指令时添加选项的功能。
进程优先级
进程优先级的概念
进程的优先权是指cpu资源分配的先后顺序,优先权高的进程有优先执行权利。
进程优先级出现的原因:系统进程数目众多,而CPU资源只有少量,甚至1个,所以进程之间是具有竞争属性的。为了高效完成任务,更合理竞争相关资源,便具有了优先级。
PRI and NI
在Linux系统下输入ps -l
查看系统进程的参数:
众多数据中和优先级有关的就是PRI和NI两个参数。
-
PRI :代表这个进程可被执行的优先级,其值越小越早被执行
-
NI :代表这个进程的nice值,其表示进程可被执行的优先级的修正数值
PRI = 优先级初始值 + nice值。
nice值的范围是[-20,19),如果某一进程的优先级过高或者过低可能会导致其他进程无法被调度或者自身无法被调度,因此nice值存在一个范围。
使用top指令修改nice值
编写以下代码用于nice值修改的测试:
#include <stdio.h>
#include <unistd.h>
int main()
{
while(1)
{
printf(".");
fflush(stdout);
sleep(1);
}
return 0;
}
编译成功后运行,并另外打开两个终端,一个输入top
指令,另一个输入ps -al
指令:
在top进程中按下r:
在top进程中输入要修改nice至的进程id:
输入要修改的nice值:
使用ps -al
指令查看:
由于初始值是80,nice值是10,因此最终PRI为90。