def readProcessMappings(process): """ Read all memory mappings of the specified process. Return a list of MemoryMapping objects, or empty list if it's not possible to read the mappings. May raise a ProcessError. """ maps = [] if not HAS_PROC: return maps try: mapsfile = openProc("%s/maps" % process.pid) except ProcError as err: raise ProcessError(process, "Unable to read process maps: %s" % err) try: for line in mapsfile: line = line.rstrip() match = PROC_MAP_REGEX.match(line) if not match: raise ProcessError(process, "Unable to parse memoy mapping: %r" % line) map = MemoryMapping(process, int(match.group(1), 16), int(match.group(2), 16), match.group(3), int(match.group(4), 16), int(match.group(5), 16), int(match.group(6), 16), int(match.group(7)), match.group(8)) maps.append(map) finally: mapsfile.close() return maps
def _get_process_status_details(self, pid): """Get details from process status""" dict_result = {} status_file = openProc('%s/status' % pid) for line in status_file: if line.startswith('Uid:'): dict_result[UID] = getpwuid(int(line[5:].split('\t')[0])) dict_result[EUID] = getpwuid(int(line[5:].split('\t')[1])) elif line.startswith('Gid:'): dict_result[GID] = getgrgid(int(line[5:].split('\t')[0])) dict_result[EGID] = getgrgid(int(line[5:].split('\t')[1])) status_file.close() return dict_result
def __init__(self): CpuLoadValue.__init__(self) self.data = None stat_file = openProc('stat') for data in stat_file: # Look for "cpu ..." line if not data.startswith("cpu "): continue self.data = [max(int(item), 0) for item in data.split()[1:]] break stat_file.close() if not self.data: raise CpuLoadError("Unable to get system load!")
def __init__(self): CpuLoadValue.__init__(self) self.data = None stat_file = openProc('stat') for data in stat_file: # Look for "cpu ..." line if not data.startswith("cpu "): continue self.data = [ max(int(item), 0) for item in data.split()[1:] ] break stat_file.close() if not self.data: raise CpuLoadError("Unable to get system load!")
def readProcessMappings(process): """ Read all memory mappings of the specified process. Return a list of MemoryMapping objects, or empty list if it's not possible to read the mappings. May raise a ProcessError. """ maps = [] if not HAS_PROC: return maps try: mapsfile = openProc("%s/maps" % process.pid) except ProcError, err: raise ProcessError(process, "Unable to read process maps: %s" % err)
def readProcessMappings(process): """ Read all memory mappings of the specified process. Return a list of MemoryMapping objects, or empty list if it's not possible to read the mappings. May raise a ProcessError. """ maps = [] if not HAS_PROC: return maps try: mapsfile = openProc("%s/maps" % process.pid) except ProcError as err: raise ProcessError(process, "Unable to read process maps: %s" % err) try: for line in mapsfile: line = line.rstrip() match = PROC_MAP_REGEX.match(line) if not match: raise ProcessError( process, "Unable to parse memoy mapping: %r" % line) map = MemoryMapping( process, int(match.group(1), 16), int(match.group(2), 16), match.group(3), int(match.group(4), 16), int(match.group(5), 16), int(match.group(6), 16), int(match.group(7)), match.group(8)) maps.append(map) finally: mapsfile.close() return maps
def dumpProcessInfo(log, pid, max_length=None): """ Dump all information about a process: - log: callback to write display one line - pid: process identifier - max_length (default: None): maximum number of environment variables """ if not RUNNING_LINUX: log("Process ID: %s" % pid) return try: stat = readProcessStat(pid) except ProcError: # Permission denied stat = None text = "Process ID: %s" % pid if stat: text += " (parent: %s)" % stat.ppid log(text) if stat: state = stat.state try: state = "%s (%s)" % (state, stat.STATE_NAMES[state]) except KeyError: pass log("Process state: %s" % state) try: log("Process command line: %r" % readProcessProcList(pid, 'cmdline')) except ProcError: # Permission denied pass try: env = readProcessProcList(pid, 'environ') if max_length: # Truncate environment if it's too long length = 0 removed = 0 index = 0 while index < len(env): var = env[index] if max_length < length + len(var): del env[index] removed += 1 else: length += len(var) index += 1 env = ', '.join("%s=%r" % tuple(item.split("=", 1)) for item in env) if removed: env += ', ... (skip %s vars)' % removed log("Process environment: %s" % env) except ProcError: # Permission denied pass try: log("Process working directory: %s" % readProcessLink(pid, 'cwd')) except ProcError: # Permission denied pass try: user = None group = None status_file = openProc("%s/status" % pid) for line in status_file: if line.startswith("Uid:"): user = [int(id) for id in line[5:].split("\t")] if line.startswith("Gid:"): group = [int(id) for id in line[5:].split("\t")] status_file.close() if user: text = "User identifier: %s" % user[0] if user[0] != user[1]: text += " (effective: %s)" % user[1] log(text) if group: text = "Group identifier: %s" % group[0] if group[0] != group[1]: text += " (effective: %s)" % group[1] log(text) except ProcError: # Permission denied pass
def get_mappings_line(self): return linux_proc.openProc("%s/maps" % self.get_pid()).readlines()
def get_mappings_line(self): return linux_proc.openProc("%s/maps" % self.get_pid())