提交 eee6dd6d 编写于 作者: N Nicolas Hennion

Merge pull request #786 from desbma/develop

Fix #546
...@@ -42,6 +42,21 @@ def convert_timedelta(delta): ...@@ -42,6 +42,21 @@ def convert_timedelta(delta):
return hours, minutes, seconds, microseconds return hours, minutes, seconds, microseconds
def split_process_cmdline(process):
"""Return dirname, basename, arguments for a process, with unknown parts set to None. """
dirname = None
basename = process['name']
arguments = None
if process['exe'] and process['cmdline'].startswith(process['exe']):
dn, bn = os.path.split(process['exe'])
dirname = dn or None
basename = bn or process['name']
arguments = process['cmdline'][len(process['exe']):].lstrip()
elif process['cmdline'].startswith(process['name']):
arguments = process['cmdline'][len(process['name']):].lstrip()
return dirname, basename, arguments
class Plugin(GlancesPlugin): class Plugin(GlancesPlugin):
"""Glances' processes plugin. """Glances' processes plugin.
...@@ -287,31 +302,27 @@ class Plugin(GlancesPlugin): ...@@ -287,31 +302,27 @@ class Plugin(GlancesPlugin):
ret.append(self.curse_add_line(msg, optional=True, additional=True)) ret.append(self.curse_add_line(msg, optional=True, additional=True))
# Command line # Command line
# If no command line for the process is available, fallback to dirname, name, arguments = split_process_cmdline(p)
# the bare process name instead
cmdline = p['cmdline']
argument = ' '.join(cmdline.split()[1:])
try: try:
if cmdline == '': if (dirname is None) and (arguments is None):
msg = ' {0}'.format(p['name']) msg = ' {0}'.format(name)
ret.append(self.curse_add_line(msg, splittable=True)) ret.append(self.curse_add_line(msg, splittable=True))
elif args.process_short_name: elif args.process_short_name:
msg = ' {0}'.format(p['name']) msg = ' {0}'.format(name)
ret.append(self.curse_add_line(msg, decoration='PROCESS', splittable=True)) ret.append(self.curse_add_line(msg, decoration='PROCESS', splittable=True))
msg = ' {0}'.format(argument) msg = ' {0}'.format(arguments)
ret.append(self.curse_add_line(msg, splittable=True)) ret.append(self.curse_add_line(msg, splittable=True))
else: else:
cmd = cmdline.split()[0] if dirname is not None:
path, basename = os.path.split(cmd) msg = ' {0}'.format(dirname) + os.sep
if os.path.isdir(path):
msg = ' {0}'.format(path) + os.sep
ret.append(self.curse_add_line(msg, splittable=True)) ret.append(self.curse_add_line(msg, splittable=True))
ret.append(self.curse_add_line(basename, decoration='PROCESS', splittable=True)) msg = name
else: else:
msg = ' {0}'.format(basename) msg = ' {0}'.format(name)
ret.append(self.curse_add_line(msg, decoration='PROCESS', splittable=True)) ret.append(self.curse_add_line(msg, decoration='PROCESS', splittable=True))
msg = ' {0}'.format(argument) if arguments is not None:
ret.append(self.curse_add_line(msg, splittable=True)) msg = ' {0}'.format(arguments)
ret.append(self.curse_add_line(msg, splittable=True))
except UnicodeEncodeError: except UnicodeEncodeError:
ret.append(self.curse_add_line('', splittable=True)) ret.append(self.curse_add_line('', splittable=True))
......
...@@ -377,7 +377,7 @@ class GlancesProcesses(object): ...@@ -377,7 +377,7 @@ class GlancesProcesses(object):
try: try:
procstat.update(proc.as_dict( procstat.update(proc.as_dict(
attrs=['username', 'cpu_percent', 'memory_percent', attrs=['username', 'cpu_percent', 'memory_percent',
'name', 'cpu_times'], ad_value='')) 'name', 'exe', 'cpu_times'], ad_value=''))
except psutil.NoSuchProcess: except psutil.NoSuchProcess:
# Try/catch for issue #432 # Try/catch for issue #432
return None return None
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册