Linux的进程优先级数值范围
范围 -20 到 19,数值越大优先级越低
示例代码
下面是一个简单的 C 语言示例,它演示了如何在 Linux 下修改进程的优先级并观察调度影响。
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/resource.h>
#include <sys/time.h>
int main(int argc, char *argv[]) {
if (argc != 2) {
fprintf(stderr, "用法: %s <优先级 (-20 到 19)>\n", argv[0]);
return 1;
}
int priority = atoi(argv[1]);
if (priority < -20 || priority > 19) {
fprintf(stderr, "错误: 优先级范围应在 -20 到 19 之间\n");
return 1;
}
// 设置进程的优先级
if (setpriority(PRIO_PROCESS, 0, priority) == -1) {
perror("setpriority 失败");
return 1;
}
// 获取并打印修改后的优先级
int new_priority = getpriority(PRIO_PROCESS, 0);
printf("进程的优先级已设置为: %d\n", new_priority);
// 记录开始时间
struct timeval start, end;
gettimeofday(&start, NULL);
// 模拟计算任务
for (volatile long i = 0; i < 1000000000; i++);
// 记录结束时间
gettimeofday(&end, NULL);
// 计算运行时间
double elapsed_time = (end.tv_sec - start.tv_sec) +
(end.tv_usec - start.tv_usec) / 1000000.0;
printf("进程运行时间: %.6f 秒\n", elapsed_time);
return 0;
}
示例代码分析
没啥好分析的,看注释就行了。
交叉编译
将代码文件复制到Ubuntu中:
然后执行下面的命令进行编译:
arm-buildroot-linux-gnueabihf-gcc -o Priority_demo Priority_demo.c
复制到网络文件目录中备用:
上板测试
打开串口终端→打开开发板→挂载网络文件系统:
mount -t nfs -o nolock,vers=3 192.168.5.11:/home/book/nfs_rootfs /mnt
执行测试程序
/mnt/process_priority/Priority_demo 10
/mnt/process_priority/Priority_demo 5
/mnt/process_priority/Priority_demo 4
结果分析
由于咱们的开发板上的Linux系统并没有多少进程在运行,所以改变进程优先级对运行时间影响不大。