Linux作为一种开源操作系统,其独特的设计让人们拥有更多的选择和自由。在Linux中,进程是操作系统管理的最基本的单位,Linux操作系统中的所有工作都是通过进程完成的。为了有效地管理进程,Linux系统提供了许多用于查看和管理进程的工具,其中pstree是一个广泛使用的工具之一。本文将探究pstree的源码实现,帮助读者更好地了解它的工作原理。
网站建设哪家好,找创新互联建站!专注于网页设计、网站建设、微信开发、小程序开发、集团企业网站建设等服务项目。为回馈新老客户创新互联还提供了含山免费建站欢迎大家使用!
一、什么是进程树?
在Linux系统中,进程不仅仅是一个简单的程序执行体,它还具有父子关系。例如,每个进程都有一个父进程(除了init进程)和子进程。Linux操作系统中的所有进程都可以形成一个进程树。进程树指的是一组相互关联的进程,这些进程之间是按照父子关系组成的。
二、什么是pstree?
pstree是一款Linux命令行工具,用于显示系统中所有进程以及它们的层次结构。它能够以树状结构的方式显示进程,显示进程之间的父子关系,清晰地显示进程之间的层次结构。pstree的使用方法非常简单,只需要在控制台中输入pstree命令,就会显示系统中所有进程的树状结构。
三、pstree的实现原理
1.主要函数
pstree的核心代码是由一个C函数实现的,该函数名为print_tree()函数,这个函数主要是通过递归的方式遍历整个进程树,并输出树形结构。 具体思路是:从进程根节点开始遍历,在遍历的过程中,递归遍历下一层的进程,从而输出整个进程树。print_tree()函数的代码如下所示:
void print_tree(pid_t pid, bool is_last) {
/* pid的信息通过获取/proc/pid/stat文件中的信息得到 */
ProcessInfo *pi = procstat_get_process_info(pid);
if (pi == NULL) {
return;
}
/* 输出每个进程的名称-指针的格式 */
printf(is_last ? “\\– ” : “|–“);
printf(“%s (%d)\n”, pi->name, (int)pid);
/* 递归 */
for (int i = 0; i n_children; i++) {
pid_t child_pid = pi->childrenpids[i];
/* 如果时最后一个进程则输出 ‘|’ */
print_tree(child_pid, i == pi->n_children – 1);
}
/* 释放内存 */
procstat_free_process_info(pi);
}
在该函数中,print_tree()函数是由pid_t pid和bool is_last两个参数调用的,pid用于确定需要遍历的进程,is_last参数用于记录是否是该层中的最后一个子进程,以便于显示不同的符号。
2.进程状态信息获取函数
在打印整个进程树的时候,需要获取每个进程的相关信息,这些信息主要包括进程ID、父进程ID、进程状态、进程优先级等。获取这些信息的方式是通过读取/proc/pid/stat文件的方式实现的。/proc/pid/stat文件中存储了进程的相关信息,包括进程ID、进程名称等,pstree通过读取该文件来获取进程的相关信息。获取进程的方法主要是由两个C函数实现的,分别是processinfo_get_process_info()函数和processinfo_free_process_info()函数。其中processinfo_get_process_info()函数用于获取进程信息,processinfo_free_process_info()函数用于释放进程信息的内存,避免内存泄漏。
四、pstree运行结果分析
下面是一个示例输出的结果,可以看到pstree以树形结构的形式展示系统中所有进程,并以不同的符号(“|”和“\”)表示各个进程之间的父子关系。
systemd─┬─ModemManager───2*[{ModemManager}]
├─NetworkManager─┬─dhcpd
│ ├─{NetworkManager}
│ └─2*[{NetworkManager}]
├─accounts-daemon───2*[{accounts-daemon}]
├─agetty
├─avahi-daemon───avahi-daemon
├─bluetoothd
├─colord───2*[{colord}]
├─cron
├─2*[dbus-daemon]
├─dnasq
├─gdm3─┬─gdm-session-wor─┬─Xorg───{Xorg}
│ │ ├─gnome-session-b─┬─gnome-shell─┬─ibus-daemon─┬─{ibus-daemon}
│ │ │ │ │ ├─{gnome-shell}
│ │ │ │ │ └─3*[{ibus-daemon}]
│ │ │ │ ├─gsd-sharing─┬─{gsd-sharing}
│ │ │ │ │ ├──3*[{gsd-sharing}]
│ │ │ │ │ └─2*[{gsd-sharing}]
│ │ │ │ ├─gsd-xset─┬─{gsd-xset}
│ │ │ │ │ └─2*[{gsd-xset}]
│ │ │ │ ├─gnome-shell-cal───2*[{gnome-shell-cal}]
│ │ │ │ ├─3*[{gnome-shell-b}]
│ │ │ │ ├─3*[{gdm-session-wor}]
│ │ │ │ └─3*[{gnome-session-b}]
│ │ │ ├─2*[ibus-x11───{ibus-x11}]
│ │ │ ├─nautilus-desktop─┬─{nautilus-desktop}
│ │ │ │ └─3*[{nautilus-desktop}]
│ │ │ └─3*[{gdm-session-wor}]
│ │ └─{gdm-session-wor}
│ └─2*[{gdm3}]
├─irqbalance───{irqbalance}
├─kerneloops───{kerneloops}
├─2*[kworker/0:0H]
├─2*[kworker/u2:0]
├─2*[migration/0]
├─2*[rcu_gp]
├─rcu_sched
├─rsyslogd───3*[{rsyslogd}]
├─rtkit-daemon───2*[{rtkit-daemon}]
├─artd───{artd}
├─systemd-journal
├─systemd-logind
├─systemd-timesyn───{systemd-timesyn}
├─thermald───{thermald}
└─udisksd───3*[{udisksd}]
从输出结果可以看出,pstree能够清晰地树形显示系统中的所有进程,每个进程都有其父子关系,能够方便地查看进程的层次结构,很方便地进行排错、分析和优化进程。同时,pstree还能根据进程的PID、名称、用户等排序输出结果,更加方便用户的使用。
进程是Linux操作系统中最基本的单位,而pstree是一款广泛使用的工具,能够清晰地树形显示系统中的所有进程。pstree的实现原理是通过遍历整个进程树,并以递归的方式输出树形结构。可以根据PID、名称、用户等不同的方式排序输出结果,更加方便用户进行进程的搜索和分析。本文对pstree的源码实现进行了探究,希望能够帮助读者更好地了解它的工作原理,并在实际操作中得到应用和优化。
相关问题拓展阅读:
ps? top ?
查看凯卜系统所有正在运行的进程,可以用ps aux命令(它的-a参数表示,不与终端有关的进程也显示出来)。还有一个和ps命令相似的命令是pstree,pstree命令用于列出正在运行的进程的进程树,所谓进程树就是显示有关系的搭孙兆进程的
相关性
,也就是显示父子进程之间的关系。pstree命令的常见用法是:pstree -Aup
-A参数表示:显示出来的进程树连接,用ASCII字符来显示
-u参数表示:列知租出进程的所属用户
-p参数表示:列出每个进程的PID
ps命令和pstree命令是选取一个时间点的进程状态,还有一个top命令可以持续检测进程运行状态,它显示的是动态的信息,有点像Windows的
任务管理器
(不过top命令是
命令行
),使用方法:
top -d 数字
-d参数后面接一个数字表示几秒更新一次显示,一般可以设置成2,表示2秒一更新。
ps 命令
linux pstree源码的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于linux pstree源码,Linux中的进程树:探究pstree源码,linux什么命令查看程序运行状态的信息别忘了在本站进行查找喔。
成都创新互联科技有限公司,是一家专注于互联网、IDC服务、应用软件开发、网站建设推广的公司,为客户提供互联网基础服务!
创新互联(www.cdcxhl.com)提供简单好用,价格厚道的香港/美国云服务器和独立服务器。创新互联——四川成都IDC机房服务器托管/机柜租用。为您精选优质idc数据中心机房租用、服务器托管、机柜租赁、大带宽租用,高电服务器托管,算力服务器租用,可选线路电信、移动、联通机房等。
当前标题:Linux中的进程树:探究pstree源码(linuxpstree源码)
浏览路径:http://www.shufengxianlan.com/qtweb/news33/490133.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联