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..

Другие вопросы по тегам