观察内核linux行为,Linux内核|实验四 观察 Linux 行为
发布日期:2021-06-24 15:58:02 浏览次数:2 分类:技术文章

本文共 3158 字,大约阅读时间需要 10 分钟。

1、实验目的

学习 linux 内核、进程、存储和其他资源的一些重要特性。通过使用/proc 文件系统接口,编写一个程序检查反映机器平衡负载、进程资源利用率方面的各种内核值, 学会使用/proc文件系统这种内核状态检查机制。

2、实验内容

编写一个默认版本的程序通过检查内核状态报告 Linux 内核行为。

程序应该在stdout上打印以下值:

1、CPU 类型和型号;

2、所使用的 Linux 内核版本;

3、从系统最后一次启动以来已经经历了多长时间(天,小时和分钟);

4、总共有多少 CPU 时间执行在用户态,系统态,空闲态;

5、配置内存数量;当前可用内存数,磁盘读写请求数;

6、内核上下文转换数。

3、实验基础

(1) 使用w命令查看登录用户正在使用的进程信息

w命令用于显示已经登录系统的用户的名称,以及他们正在做的事。

输出的信息包括:

$ w

$ w –h

$ w –u

$ w –s

123203_0.png

(2)使用who命令查看(登录)用户名称及所启动的进程

who命令用于列举出当前已登录系统的用户名称。

$ who

$ users

123203_1.png

(3) 使用whoami命令查看你所使用的登录名称

whoami命令用于显示登入的用户名。

$ whoami

$ id –un

123203_2.png

(4)查看系统的信息

last命令可用于显示特定用户登录系统的历史记录。

该命令的输出结果包含以下几列信息:

用户名称、tty设备号、历史登录时间日期、登出时间日期、总工作时间

$ last Jason

$ cal

$ find –name “”

123203_3.png

(5) /proc

cat /proc/cpuinfo ? #CPU的类型和型号

cat /proc/version ? #使用的Linux内核版本、编译器版本

cat /proc/meminfo ? #配置了多少内存

cat /proc/meminfo ? #当前有多少可用内存

cat /proc/stat ? #有多少磁盘读写请求;从系统启动以来已经创建了多少进程

(图略)

4、实验过程

编写一个默认版本的程序通过检查内核状态报告 Linux 内核行为

1、CPU 类型和型号;

2、所使用的 Linux 内核版本;

3、从系统最后一次启动以来已经经历了多长时间(天,小时和分钟);

4、总共有多少 CPU 时间执行在用户态,系统态,空闲态;

5、配置内存数量;当前可用内存数,磁盘读写请求数;

6、内核上下文转换数。

程序如下:

#include

#include

#include

#include

#include

#include

int main(int argc, char *argv[]) {

char repTypeName[16];

char c1, c2, ch;

int interval, duration;

char *lineBuf;

int LB_SIZE = 255; // 设置最大长度

FILE *thisProcFile;

struct timeval now; // 更正类型

int iteration;

lineBuf = (char *)malloc(sizeof(char) * LB_SIZE); // 分配空间

interval = 2; // 初始化参数

duration = 60;

strcpy(repTypeName, "Standard");

if(argc > 1) { // 更正, Linux下argc至少为1, 故改为 > 1, 即没有参数时越过

sscanf(argv[1], "%c%c", &c1, &c2);

if(c1 != '-') {

fprintf(stderr, "usage: ksamp [-s][-l int dur]n");

exit(1);

}

if(c2 == 's')

strcpy(repTypeName, "Short");

if(c2 == 'l') {

strcpy(repTypeName, "Long");

interval = atoi(argv[2]);

duration = atoi(argv[3]);

}

}

// 获取时间

gettimeofday(&now, NULL);

printf("Status report %s at %sn", repTypeName, ctime(&(now.tv_sec)));

// 更正ctime函数调用

// 读取hostname

thisProcFile = fopen("/etc/hostname", "r");

memset(lineBuf, 0, LB_SIZE); // 初始化lineBuf

fgets(lineBuf, LB_SIZE - 1, thisProcFile);

printf("Machine hostname: %sn", lineBuf);

fclose(thisProcFile);

// 读取版本信息

thisProcFile = fopen("/procersion", "r");

memset(lineBuf, 0, LB_SIZE);

fgets(lineBuf, LB_SIZE - 1, thisProcFile);

printf("The Version: %sn", lineBuf);

fclose(thisProcFile);

// 读取CPU信息

thisProcFile = fopen("/procuinfo", "r");

memset(lineBuf, 0, LB_SIZE);

fgets(lineBuf, LB_SIZE - 1, thisProcFile);

printf("The Cpu: %sn", lineBuf);

fclose(thisProcFile);

// 读取当前时间

thisProcFile = fopen("/proc/uptime", "r");

memset(lineBuf, 0, LB_SIZE);

fgets(lineBuf, LB_SIZE - 1, thisProcFile);

printf("The Running Time: %sn", lineBuf);

fclose(thisProcFile);

// 读取内存信息

printf("The MemInfo: ");

thisProcFile = fopen("/proc/meminfo", "r");

while(!feof(thisProcFile)) {

putchar(fgetc(thisProcFile));

}

fclose(thisProcFile);

// 当前状况

printf("The Status: ");

thisProcFile = fopen("/proc/stat", "r");

while(!feof(thisProcFile)) {

putchar(fgetc(thisProcFile));

}

fclose(thisProcFile);

iteration = 0;

while(iteration < duration) {

sleep(interval);

thisProcFile = fopen("/proc/loadavg", "r");

while(!feof(thisProcFile)) {

putchar(fgetc(thisProcFile));

}

fclose(thisProcFile);

iteration += interval;

}

return 0;

}

运行结果如下:

123203_4.png

转载地址:https://blog.csdn.net/weixin_33682804/article/details/116660650 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:linux mint用户数,问答:为什么Linux Mint比Ubuntu好?
下一篇:linux脚本编辑按上键出现A,[转] linux下shell中使用上下键翻出历史命名时出现^[[A^[[A^[[A^[[B^[[B的问题解决,Linux使用退格键时出现^H解决方法...

发表评论

最新留言

第一次来,支持一个
[***.219.124.196]2024年04月01日 00时22分48秒