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系统并没有多少进程在运行,所以改变进程优先级对运行时间影响不大。