Index: tools/linux/procfs.py |
diff --git a/tools/linux/procfs.py b/tools/linux/procfs.py |
index 6308fdd93da7a14ad279edd4be38630cd81b6d1c..34510014a59f0b7e54a8f05eec84e33028354d4e 100755 |
--- a/tools/linux/procfs.py |
+++ b/tools/linux/procfs.py |
@@ -92,8 +92,11 @@ class ProcStat(object): |
@staticmethod |
def load(pid): |
- with open(os.path.join('/proc', str(pid), 'stat'), 'r') as stat_f: |
- return ProcStat.load_file(stat_f) |
+ try: |
+ with open(os.path.join('/proc', str(pid), 'stat'), 'r') as stat_f: |
+ return ProcStat.load_file(stat_f) |
+ except IOError: |
+ return None |
@property |
def raw(self): |
@@ -135,7 +138,10 @@ class ProcStatm(object): |
@staticmethod |
def load_file(statm_f): |
- raw = statm_f.readlines() |
+ try: |
+ raw = statm_f.readlines() |
+ except (IOError, OSError): |
+ return None |
statm = ProcStatm._PATTERN.match(raw[0]) |
return ProcStatm(raw, |
statm.groupdict().get('SIZE'), |
@@ -148,8 +154,11 @@ class ProcStatm(object): |
@staticmethod |
def load(pid): |
- with open(os.path.join('/proc', str(pid), 'statm'), 'r') as statm_f: |
- return ProcStatm.load_file(statm_f) |
+ try: |
+ with open(os.path.join('/proc', str(pid), 'statm'), 'r') as statm_f: |
+ return ProcStatm.load_file(statm_f) |
+ except (IOError, OSError): |
+ return None |
@property |
def raw(self): |
@@ -330,8 +339,11 @@ class ProcMaps(object): |
@staticmethod |
def load(pid): |
- with open(os.path.join('/proc', str(pid), 'maps'), 'r') as maps_f: |
- return ProcMaps.load_file(maps_f) |
+ try: |
+ with open(os.path.join('/proc', str(pid), 'maps'), 'r') as maps_f: |
+ return ProcMaps.load_file(maps_f) |
+ except (IOError, OSError): |
+ return None |
def append_line(self, line): |
entry = self.parse_line(line) |
@@ -555,8 +567,11 @@ class ProcPagemap(object): |
vma_internals = collections.OrderedDict() |
process_pageframe_set = set() |
- pagemap_fd = os.open( |
- os.path.join('/proc', str(pid), 'pagemap'), os.O_RDONLY) |
+ try: |
+ pagemap_fd = os.open( |
+ os.path.join('/proc', str(pid), 'pagemap'), os.O_RDONLY) |
+ except (IOError, OSError): |
+ return None |
for vma in maps: |
present = 0 |
swapped = 0 |
@@ -564,8 +579,11 @@ class ProcPagemap(object): |
pageframes = collections.defaultdict(int) |
begin_offset = ProcPagemap._offset(vma.begin) |
chunk_size = ProcPagemap._offset(vma.end) - begin_offset |
- os.lseek(pagemap_fd, begin_offset, os.SEEK_SET) |
- buf = os.read(pagemap_fd, chunk_size) |
+ try: |
+ os.lseek(pagemap_fd, begin_offset, os.SEEK_SET) |
+ buf = os.read(pagemap_fd, chunk_size) |
+ except (IOError, OSError): |
+ return None |
if len(buf) < chunk_size: |
_LOGGER.warn('Failed to read pagemap at 0x%x in %d.' % (vma.begin, pid)) |
pagemap_values = struct.unpack( |
@@ -586,7 +604,10 @@ class ProcPagemap(object): |
total_present += present |
total_swapped += swapped |
total_vsize += vsize |
- os.close(pagemap_fd) |
+ try: |
+ os.close(pagemap_fd) |
+ except OSError: |
+ return None |
return ProcPagemap(total_vsize, total_present, total_swapped, |
vma_internals, in_process_dup) |