Python终止用户拥有的所有进程

0 投票
2 回答
1704 浏览
提问于 2025-04-16 09:50

我需要写一个函数,能够结束所有属于某个用户的进程,然后再启动几个进程。

我遇到的主要问题是,我不知道怎么检查所有进程是否都被结束了。如果还有进程在运行,我想再尝试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 个回答

1

你不能用你找到进程时的方法来做同样的事情吗?那个函数应该返回0。

1

在Linux系统中(也兼容POSIX),检查一个程序是否在运行的默认方法是使用 kill -0 PID。简单来说,你可以用 os.kill 来实现这个功能,只需要把信号设置为0。如果这个程序已经结束了,它会抛出一个错误;如果它还在运行,就不会有任何问题。

撰写回答