只做男生穿搭的网站wordpress淘宝i主题

张小明 2026/3/2 20:02:10
只做男生穿搭的网站,wordpress淘宝i主题,vs做网站不显示图片,网站建设 ipv61.实验目的1.了解proc文件系统2.理解task_struct结构及内核进程控制块链表遍历机制3.采用添加内核模块技术和访问/proc目录方法#xff0c;打印进程树2.实验截图及结果分析#xff08;1#xff09;实验截图①访问/proc目录方法打印进程树②添加内核模块技术打印进程树#…1.实验目的1.了解proc文件系统2.理解task_struct结构及内核进程控制块链表遍历机制3.采用添加内核模块技术和访问/proc目录方法打印进程树2.实验截图及结果分析1实验截图①访问/proc目录方法打印进程树②添加内核模块技术打印进程树2实验结果分析从实验截图结果来看通过访问/proc目录和添加内核模块这两种方式均成功打印出了proc文件中包含的进程信息且在进程树层级结构的呈现效果上各有特点。用户态编程访问/proc目录方法通过编写的pstree.c代码实现了从/proc下各进程status文件中读取、解析关键信息my_getpid和my_getppid函数成功提取出进程的PID和PPID特定的字符串处理逻辑解析出进程名在print_pstree函数里借助统计子进程数量和记录已打印子进程数依据递归深度精准控制缩进和连接符的打印最终呈现的进程树清晰展示了进程名、进程id和父进程id层级结构一目了然父子进程关系清晰可辨极大方便了对进程间关系的理解和分析。内核态编程添加内核模块技术中pstree2.c的print_tree2函数借助list_for_each遍历cur-children链表运用深度优先算法递归打印子进程从实验截图的打印结果来看不仅呈现了进程名还包含了PID号并且通过缩进和特定符号形成了树形结构清晰体现了进程间的层级关系让进程树的展示更加直观既保留了内核态遍历的高效性又通过补充PID和优化结构增强了信息的完整性和可读性。3.实验程序1访问/proc目录方法打印进程树pstree.c#include stdio.h #include stdlib.h #include errno.h #include string.h #include netdb.h #include sys/types.h #include pthread.h #include unistd.h #include dirent.h char default_path[1024] /proc/; int s 0; typedef struct file_info { int pid; int ppid; char name[1024]; int flag; int rec; } info; // 从字符串中提取 PID int my_getpid(char *str) { int len strlen(str); char num[10]; int i, j, ret; if (strncmp(str, Pid, 3) 0) { for (i 0; i len; i) { if (str[i] 0 str[i] 9) break; } for (j 0; j len - i; j) { num[j] str[i j]; } ret atoi(num); } else ret 0; return ret; } // 从字符串中提取 PPID int my_getppid(char *str) { int len strlen(str); char num[10]; int i, j, ret; if (strncmp(str, PPid, 4) 0) { for (i 0; i len; i) { if (str[i] 0 str[i] 9) break; } for (j 0; j len - i; j) { num[j] str[i j]; } ret atoi(num); } else ret 0; return ret; } // 检查是否存在指定父进程 ID 的子进程 int child_exist(info *file, int count, int ppid) { int i; for (i 0; i count; i) { if (file[i].flag 0 file[i].ppid ppid) return 1; } return 0; } // 递归打印进程树 void print_pstree(info *file, int count, int ppid, int rec) { int i, j, k; int child_count 0; // 记录当前父进程下子进程数量 int printed_child 0; // 记录已打印子进程数量 // 统计子进程数量 for (i 0; i count; i) { if (file[i].flag 0 file[i].ppid ppid) { child_count; } } for (i 0; i count; i) { if (file[i].flag 0 file[i].ppid ppid) { file[i].rec rec 1; file[i].flag 1; // 打印缩进和连接符 for (k 0; k rec; k) { if (k rec - 1) { printf(│ ); } else { if (printed_child child_count - 1) { printf( ); } else { printf(├── ); } } } printf([%d]%s\n, file[i].pid, file[i].name); print_pstree(file, count, file[i].pid, file[i].rec); printed_child; } } } int main() { int i, j, k, total, s1, s2, count, t; char str[1024], dir[1024]; struct dirent **namelist; strcpy(dir, default_path); total scandir(dir, namelist, 0, alphasort); printf(path%s,total%d\n, dir, total); count 0; for (i 0; i total; i) { strcpy(str, namelist[i]-d_name); if (str[0] 0 str[0] 9) count; } printf(进程数:%d\n, count); info file[1024]; i 0; t 0; while (i total) { FILE *fp; char path[1024], name[1024]; int pid, ppid; strcpy(str, namelist[i]-d_name); strcpy(path, default_path); if (str[0] 0 str[0] 9) { strcat(path, str); strcat(path, /status); fp fopen(path, r); while (!feof(fp)) { fgets(str, 1024, fp); if ((s1 my_getpid(str)) ! 0) pid s1; if ((s2 my_getppid(str)) ! 0) ppid s2; if (strncmp(str, Name, 4) 0) { for (j 4; j strlen(str); j) { if (str[j] a str[j] z) break; } for (k j; k strlen(str); k) { name[k - j] str[k]; } name[k - j - 1] \0; } file[t].pid pid; file[t].ppid ppid; strcpy(file[t].name, name); } fclose(fp); t; } i; } // 初始化标志位和递归深度 for (i 0; i count; i) { file[i].flag 0; file[i].rec 0; } print_pstree(file, count, 0, 0); return 0; }2添加内核模块技术打印进程树①pstree2.c#includelinux/module.h #includelinux/sched.h #includelinux/list.h typedef struct task_struct ts; // 递归打印进程树 void print_tree2(ts *cur,int blanks){ int i; for(i1;iblanks;i) printk( ); printk(%s\n,cur-comm); struct list_head *list; list_for_each(list,cur-children){ ts *plist_entry(list,struct task_struct,sibling); print_tree2(p,blanks4); } } // 模块初始化函数 int init_pstree2(void){ ts *cur; // 找到 init 进程PID 为 1 for(cur current; cur-pid ! 1; cur cur-parent); print_tree2(cur,0); return 0; } // 模块退出函数 void exit_pstree2(void){ } // 注册模块初始化函数 module_init(init_pstree2); // 注册模块退出函数 module_exit(exit_pstree2);② Makefileobj-m : pstree2.o KERNELDIR ? /lib/modules/$(shell uname -r)/build PWD : $(shell pwd) modules: $(MAKE) -C $(KERNELDIR) M$(PWD) modules clean: rm -rf *.o .*.cmd *.ko *.mod.c
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

亚马逊网网站建设规划报告天津招投标 天津建设工程信息网

Windows 系统下安装 PostgreSQL 全攻略 在当今的数据驱动时代,数据库管理系统的选择至关重要。PostgreSQL 作为一款功能强大的开源数据库,以其高度的可靠性、扩展性和丰富的特性,在众多开发者和企业中广受欢迎。本文将详细介绍在 Windows 系统下安装 PostgreSQL 的全过程,…

张小明 2026/1/19 19:52:37 网站建设

淮安市建设工程质量监督站网站网站建设方案书备案

Kotaemon批处理模式:批量导入知识库数据的高效方式 在企业级智能问答系统的开发中,一个常被低估但至关重要的环节是——如何把成千上万份文档快速、准确地“喂”给AI模型。很多团队都经历过这样的场景:花了数周时间整理好产品手册、客服FAQ和…

张小明 2026/1/19 19:52:06 网站建设

做淘宝要用的网站吗网站邮箱建设

Linux命令行与软件管理全攻略 在Linux系统中,命令行操作和软件管理是非常重要的技能。下面我们将详细介绍一些实用的命令操作和软件管理方法。 命令行操作技巧 在进行命令行操作时,有许多实用的快捷键和命令可以提高效率。 排序与加粗设置 :当你做出选择后,再次按下En…

张小明 2026/1/19 19:51:04 网站建设

做进出口外贸网站江苏建设职业技术学院

Black Candy:5分钟搭建你的专属音乐云平台 【免费下载链接】blackcandy A self hosted music streaming server 项目地址: https://gitcode.com/gh_mirrors/bl/blackcandy 厌倦了被算法推荐支配的音乐体验?想要完全掌控自己的音乐收藏&#xff1f…

张小明 2026/1/19 19:50:34 网站建设

北京网站开发公司前十名广州建设厅网站首页

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 开发一个高效的Nacos认证配置生成器,要求:1. 输入原始字符串自动转换为base64 2. 生成可直接使用的环境变量配置命令 3. 提供Docker/K8s部署配置示例 4. 支持…

张小明 2026/1/19 19:50:03 网站建设

宁波高端网站建设公司网站正在建设中 源码

第一章:Dify Tesseract热更新机制概述Dify Tesseract 是一款面向分布式服务架构的动态配置管理与热更新框架,专注于在不重启服务的前提下实现配置、规则及部分业务逻辑的实时生效。其核心设计理念是低侵入性、高可用性和强一致性,适用于对系统…

张小明 2026/1/19 19:49:32 网站建设