mã mluebke không đúng 100%; kill () cũng có thể tăng EPERM (quyền truy cập bị từ chối) trong trường hợp đó, điều đó rõ ràng có nghĩa là một quá trình tồn tại. Điều này được cho là hoạt động:
(được chỉnh sửa theo bình luận của Jason R. Coombs)
import errno
import os
def pid_exists(pid):
"""Check whether pid exists in the current process table.
UNIX only.
"""
if pid < 0:
return False
if pid == 0:
# According to "man 2 kill" PID 0 refers to every process
# in the process group of the calling process.
# On certain systems 0 is a valid PID but we have no way
# to know that in a portable fashion.
raise ValueError('invalid PID 0')
try:
os.kill(pid, 0)
except OSError as err:
if err.errno == errno.ESRCH:
# ESRCH == No such process
return False
elif err.errno == errno.EPERM:
# EPERM clearly means there's a process to deny access to
return True
else:
# According to "man 2 kill" possible error values are
# (EINVAL, EPERM, ESRCH)
raise
else:
return True
Bạn không thể thực hiện việc này trên Windows trừ khi bạn sử dụng pywin32, ctypes hoặc mô-đun mở rộng C. Nếu bạn đồng ý với việc phụ thuộc vào lib bên ngoài, bạn có thể sử dụng psutil :
>>> import psutil
>>> psutil.pid_exists(2353)
True