Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
蜕变的菜鸟
glances
提交
a3f5dc51
G
glances
项目概览
蜕变的菜鸟
/
glances
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
G
glances
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
a3f5dc51
编写于
11月 07, 2014
作者:
D
desbma
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Add basic tree structure and text display
上级
bff08602
变更
1
显示空白变更内容
内联
并排
Showing
1 changed file
with
80 addition
and
0 deletion
+80
-0
glances/core/glances_processes.py
glances/core/glances_processes.py
+80
-0
未找到文件。
glances/core/glances_processes.py
浏览文件 @
a3f5dc51
...
...
@@ -25,6 +25,81 @@ from glances.core.glances_timer import Timer, getTimeSinceLastUpdate
import
psutil
import
re
PROCESS_TREE
=
True
# TODO remove that and take command line parameter
class
ProcessTreeNode
(
object
):
def
__init__
(
self
,
process
=
None
):
self
.
process
=
process
# is None for tree root node
self
.
children
=
[]
def
__str__
(
self
):
""" Return the tree as text for debugging. """
lines
=
[]
is_root
=
self
.
process
is
None
if
is_root
:
lines
.
append
(
"#"
)
else
:
lines
.
append
(
"[%s]"
%
(
self
.
process
.
name
()))
indent_str
=
" "
*
len
(
lines
[
-
1
])
child_lines
=
[]
for
child
in
self
.
children
:
for
i
,
line
in
enumerate
(
str
(
child
).
splitlines
()):
if
i
==
0
:
if
child
is
self
.
children
[
0
]:
if
len
(
self
.
children
)
==
1
:
tree_char
=
"─"
else
:
tree_char
=
"┌"
elif
child
is
self
.
children
[
-
1
]:
tree_char
=
"└"
else
:
tree_char
=
"├"
child_lines
.
append
(
tree_char
+
"─ "
+
line
)
else
:
if
is_root
:
child_lines
.
append
(
"│ "
+
indent_str
+
line
)
else
:
child_lines
.
append
(
indent_str
+
line
)
if
child_lines
:
lines
[
-
1
]
+=
child_lines
[
0
]
for
child_line
in
child_lines
[
1
:]:
lines
.
append
(
indent_str
+
child_line
)
return
"
\n
"
.
join
(
lines
)
def
findProcess
(
self
,
process
):
""" Search in tree for the ProcessTreeNode owning process, and return it or None if not found. """
assert
(
process
is
not
None
)
if
self
.
process
is
process
:
return
self
for
child
in
self
.
children
:
node
=
child
.
findProcess
(
process
)
if
node
is
not
None
:
return
node
@
staticmethod
def
buildTree
(
processes
):
""" Build a process tree using using parent/child relationships, and return the root node. """
tree_root
=
ProcessTreeNode
()
for
process
in
processes
:
assert
(
process
is
not
None
)
new_node
=
ProcessTreeNode
(
process
)
parent_process
=
process
.
parent
()
if
parent_process
is
None
:
# no parent, add this node at the top level
tree_root
.
children
.
append
(
new_node
)
else
:
parent_node
=
tree_root
.
findProcess
(
parent_process
)
if
parent_node
is
not
None
:
# parent is already in the tree, add a new child
parent_node
.
children
.
append
(
new_node
)
# marche pas
else
:
# parent is not in tree, add this node at the top level
tree_root
.
children
.
append
(
new_node
)
return
tree_root
class
GlancesProcesses
(
object
):
...
...
@@ -383,6 +458,11 @@ class GlancesProcesses(object):
except
:
pass
if
PROCESS_TREE
:
tree
=
ProcessTreeNode
.
buildTree
(
processdict
.
keys
())
print
(
tree
)
exit
(
0
)
# Process optimization
# Only retreive stats for visible processes (get_max_processes)
if
self
.
get_max_processes
()
is
not
None
:
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录