Python убивает все процессы, принадлежащие пользователю
Мне нужно сделать функцию, которая может убить все процессы, принадлежащие пользователю, а затем запустить несколько.
Моя главная проблема заключается в том, что я не могу понять, как проверить, все ли процессы были убиты, и если все еще запущенные процессы, повторить попытку 1-2 раза, чтобы убить их, а затем вернуть ошибку. Я хочу использовать только код Python.
Вот мой код:
import os
import pwd
def pkill(user):
pids = []
user_pids = []
uid = pwd.getpwnam(user).pw_uid
# get all PID
for i in os.listdir('/proc'):
if i.isdigit():
pids.append(i)
# test if PID is owned by user
for i in pids:
puid = os.stat(os.path.join('/proc', i)).st_uid
if puid == uid:
user_pids.append(i)
# print len(user_pids)
# check of PID still exist and kill it
for i in user_pids:
if os.path.exists(os.path.join('/proc',i)):
try:
os.kill(int(i), 15)
except OSError:
Спасибо
2 ответа
Решение
В Linux по умолчанию проверяется, запущен ли процесс (он также совместим с POSIX), это использовать kill -0 PID
так что здесь вы можете просто сделать os.kill
но с 0 в качестве сигнала, если процесс мертв, он должен выдать исключение, если он жив, он не должен.
Вы не можете сделать то же самое, что вы сделали, чтобы найти процессы? эта функция должна вернуть 0..