Я на самом деле не программист на Python, но, очевидно, у Python есть os.waitpid()
.Это должно потреблять меньше процессорного времени и обеспечивать гораздо более быстрый отклик, чем, скажем, попытка уничтожить процесс с интервалом в четверть секунды.
Добавление: Как отмечает Нико, os.waitpid()
может не работать, если процесс не является дочерним по отношению к текущему процессу.В этом случае использование os.kill(pid, 0)
действительно может быть лучшим решением.Обратите внимание, что, как правило, существует три вероятных результата вызова os.kill()
для процесса:
- Если процесс существует и принадлежит вам, вызов завершается успешно.
- Еслипроцесс существует, но принадлежит другому пользователю, он выдает
OSError
с атрибутом errno
, установленным в errno.EPERM
. - Если процесс не существует, он выдает
OSError
с атрибутом errno
, установленным в errno.ESRCH
.
Таким образом, чтобы надежно проверить, существует ли процесс, вы должны сделать что-то вроде
def is_running(pid):
try:
os.kill(pid, 0)
except OSError as err:
if err.errno == errno.ESRCH:
return False
return True