This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

classification
Title: Do we have something like os.pid_exists()?
Type: enhancement Stage:
Components: Library (Lib) Versions: Python 3.2
process
Status: closed Resolution: rejected
Dependencies: Superseder:
Assigned To: Nosy List: exarkun, loewis, pmolina, terry.reedy
Priority: normal Keywords:

Created on 2009-07-23 18:28 by pmolina, last changed 2022-04-11 14:56 by admin. This issue is now closed.

Messages (9)
msg90850 - (view) Author: Patricio Mariano Molina (pmolina) Date: 2009-07-23 18:28
I couldn't find anything like os.pid_exists() in Python 2.5/2.6, neither
in bugs.python.org (this *could* be a dupe)

Do we have something like that?

Right now I'm doing this:

try:
    os.kill(int(pid), 0)
    return True
except OSError:
    return False

I'd love to do the same without catching an exception (they're
expensive!), maybe in C?

Thanks!
msg90851 - (view) Author: Jean-Paul Calderone (exarkun) * (Python committer) Date: 2009-07-23 18:31
This is quite a microoptimization.  Why do you think you need to avoid
the exception here?
msg90852 - (view) Author: Jean-Paul Calderone (exarkun) * (Python committer) Date: 2009-07-23 18:35
For what it's worth, here are some timings from my system.  First,
os.kill without raising an exception:

exarkun@boson:~$ python -m timeit -s 'import os; pid = os.getpid()' '
os.kill(pid, 0)
'
1000000 loops, best of 3: 0.413 usec per loop
exarkun@boson:~$ 

Next, os.kill without raising an exception, but with exception handling:

exarkun@boson:~$ python -m timeit -s 'import os; pid = os.getpid()' '
> try:
>     os.kill(pid, 0)
> except OSError, e:
>     pass
> '
1000000 loops, best of 3: 0.42 usec per loop

Finally, os.kill with exception handling and raising an exception:

exarkun@boson:~$ python -m timeit -s 'import os; pid = os.getpid()' '
try:
    os.kill(pid + 1, 0)
except OSError, e:
    pass
'
100000 loops, best of 3: 2.58 usec per loop

The slowest case is almost 7x slower than the fastest case.  However,
this is only triggered when os.kill raises an exception (ie, if the pid
does exist, it's still fast).  Plus, this "slow" case still only takes
two and a half microseconds.  That's pretty fast.
msg90854 - (view) Author: Patricio Mariano Molina (pmolina) Date: 2009-07-23 18:47
Hey Jean-Paul, thanks for the quick reply!

You're right, but I wasn't thinking too much about optimization: I think
it would be useful to have that simple function, returning True or False.

I use to search for active PIDs *a lot* with Python

Do you think is a "YAGNI" case?
msg90855 - (view) Author: Jean-Paul Calderone (exarkun) * (Python committer) Date: 2009-07-23 18:50
It might be better to pick a better (but probably platform-specific) API
for such a use-case.  os.kill has a problem with false positives (on
Linux it will tell you a process exists even when it doesn't).  Looking
in /proc/ or using a Windows API to enumerate all existing processes
might be better.  These have the advantage of giving you a bunch of PID
information all at once which you can then check against, rather than
repeatedly making syscalls.
msg90856 - (view) Author: Patricio Mariano Molina (pmolina) Date: 2009-07-23 18:56
Sounds good. And what do you think about os.pid_exists() using /proc/ or
a Windows API?
msg90859 - (view) Author: Jean-Paul Calderone (exarkun) * (Python committer) Date: 2009-07-23 19:14
The os module is mostly for wrappers around native platform APIs.  So at
the very least, I don't think such an API belongs there.  It would fit
in to a general process-related module, perhaps.
msg90867 - (view) Author: Martin v. Löwis (loewis) * (Python committer) Date: 2009-07-23 23:28
> I'd love to do the same without catching an exception (they're
> expensive!)

Why do you say that? I don't believe that exceptions are expensive
(e.g. compared to the system call)
msg109676 - (view) Author: Terry J. Reedy (terry.reedy) * (Python committer) Date: 2010-07-09 04:17
Avoiding an exception for a very rare use case is an inadequate reason to add a new function. Requests to add someone's favorite short, specialized, and easy-to-write function are a common feature of python-list.
History
Date User Action Args
2022-04-11 14:56:51adminsetgithub: 50803
2010-07-09 04:17:49terry.reedysetstatus: open -> closed
versions: + Python 3.2, - Python 2.6, Python 2.5
nosy: + terry.reedy

messages: + msg109676

resolution: rejected
2009-07-23 23:28:53loewissetnosy: + loewis
title: Do we have something like os.pid_exists()? -> Do we have something like os.pid_exists()?
messages: + msg90867
2009-07-23 19:14:01exarkunsetmessages: + msg90859
2009-07-23 18:56:24pmolinasetmessages: + msg90856
2009-07-23 18:50:21exarkunsetmessages: + msg90855
2009-07-23 18:47:10pmolinasetmessages: + msg90854
2009-07-23 18:35:00exarkunsetmessages: + msg90852
2009-07-23 18:31:14exarkunsetnosy: + exarkun
messages: + msg90851
2009-07-23 18:28:34pmolinacreate