Skip to content

[Ubuntu 16.04] FileNotFoundError: [Errno 2] No such file or directory: '/proc/12825/stat' #1447

Closed
@pseudotensor

Description

Platform

  • Ubuntu 16.04
$ pip show psutil
Name: psutil
Version: 5.4.5
Summary: Cross-platform lib for process and system monitoring in Python.
Home-page: https://github.com/giampaolo/psutil
Author: Giampaolo Rodola
Author-email: g.rodola@gmail.com
License: BSD
Location: /home/jon/.pyenv/versions/3.6.4/lib/python3.6/site-packages

Bug description

def find_procs_by_name(name):
    "Return a list of processes matching 'name'."
    ls = []
    for p in psutil.process_iter(attrs=['name']):
        try:
            if name in p.info['name'] or name in getprocname(p):
                ls.append(p)
        except psutil.NoSuchProcess:
            pass
        except psutil.AccessDenied:
            pass
    return ls

def getprocname(pp, joinchar=" "):
    # assume pp has pid that exists
    ppname1 = str(pp.name())
    cmdline = pp.cmdline()
    cmdline = [x for x in cmdline if x != '']
    ppname2 = str(joinchar.join(cmdline))
    if len(ppname1) > len(ppname2):
        return ppname1
    else:
        return ppname2

rarely (but shouldn't ever) gives:

Traceback (most recent call last):
  File "/data/jon/h2oai/h2oaicore/systemutils.py", line 3100, in find_procs_by_name
    for p in psutil.process_iter(attrs=['name']):
  File "/home/jon/.pyenv/versions/3.6.4/lib/python3.6/site-packages/psutil/__init__.py", line 1440, in process_iter
    if proc.is_running():
  File "/home/jon/.pyenv/versions/3.6.4/lib/python3.6/site-packages/psutil/__init__.py", line 569, in is_running
    return self == Process(self.pid)
  File "/home/jon/.pyenv/versions/3.6.4/lib/python3.6/site-packages/psutil/__init__.py", line 340, in __init__
    self._init(pid)
  File "/home/jon/.pyenv/versions/3.6.4/lib/python3.6/site-packages/psutil/__init__.py", line 367, in _init
    self.create_time()
  File "/home/jon/.pyenv/versions/3.6.4/lib/python3.6/site-packages/psutil/__init__.py", line 698, in create_time
    self._create_time = self._proc.create_time()
  File "/home/jon/.pyenv/versions/3.6.4/lib/python3.6/site-packages/psutil/_pslinux.py", line 1402, in wrapper
    return fun(self, *args, **kwargs)
  File "/home/jon/.pyenv/versions/3.6.4/lib/python3.6/site-packages/psutil/_pslinux.py", line 1584, in create_time
    values = self._parse_stat_file()
  File "/home/jon/.pyenv/versions/3.6.4/lib/python3.6/site-packages/psutil/_common.py", line 337, in wrapper
    return fun(self)
  File "/home/jon/.pyenv/versions/3.6.4/lib/python3.6/site-packages/psutil/_pslinux.py", line 1441, in _parse_stat_file
    with open_binary("%s/%s/stat" % (self._procfs_path, self.pid)) as f:
  File "/home/jon/.pyenv/versions/3.6.4/lib/python3.6/site-packages/psutil/_pslinux.py", line 187, in open_binary
    return open(fname, "rb", **kwargs)
FileNotFoundError: [Errno 2] No such file or directory: '/proc/12825/stat'

I thought process_iter() and proc.is_running() were supposed to be robust against processes going away, etc.

I basically have to stop using psutil's process iter because it's not reliable. Instead, have to use "ps" on command line via subprocess.check_output().

Metadata

Assignees

Labels

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions