用于Linux进程管理的Python库

用于Linux进程管理的Python库,python,linux,process,Python,Linux,Process,通过我的web界面,我想启动/停止某些进程,并确定启动的进程是否仍在运行 我现有的网站是基于Python的,并且运行在Linux服务器上,所以您知道支持此功能的合适库吗 谢谢操作系统模块可能是您的朋友。例如,有os.kill,用于终止进程 在获取进程列表方面,您可能需要使用ps命令。查看运行进程列表是通过查看/proc目录的内容来完成的(甚至是通过“ps”之类的核心实用程序) 因此,您对查询正在运行的进程感兴趣的库与用于处理任何其他文件和目录的库相同(即sys或os,具体取决于您所追求的风格。请

通过我的web界面,我想启动/停止某些进程,并确定启动的进程是否仍在运行

我现有的网站是基于Python的,并且运行在Linux服务器上,所以您知道支持此功能的合适库吗


谢谢

操作系统模块可能是您的朋友。例如,有
os.kill
,用于终止进程


在获取进程列表方面,您可能需要使用
ps
命令。查看运行进程列表是通过查看/proc目录的内容来完成的(甚至是通过“ps”之类的核心实用程序)


因此,您对查询正在运行的进程感兴趣的库与用于处理任何其他文件和目录的库相同(即
sys
os
,具体取决于您所追求的风格。请特别注意
os.path
,但它可以完成您所追求的大部分功能)。要终止进程或以其他方式与进程交互,您需要向它们发送信号,这可以通过
os.kill
实现。最后,您可以使用
os.popen
和friends启动新进程。

Python子进程可能会对您有所帮助。如果使用子流程创建流程,可以使用Popen.terminate()函数停止它

因为您说过这是一台Linux服务器,所以调用外部ps二进制文件通常比直接使用/proc中的信息要慢,占用更多资源,并且更容易出错

由于没有其他人提及,一个简单的方法是:

glob.glob('/proc/[0-9]*/')

祝你好运。

这是我用的。它使用procfs(因此您仅限于类似Unix的系统,我认为在macs上无法工作)和前面提到的glob。它还获取cmdline,它允许您标识流程。要终止进程,可以使用
os.kill(signal.SIGTERM,pid)
。要使用子流程,请查看此帖子


要启动/停止python子进程,可以使用subprocess模块。 要检查它们是否正在运行,您可以使用:

…或此(它还将检查PID是否已重新使用):


我会用PSutil。提供一个实际例子:

import psutil

for proc in psutil.get_process_list():
    if proc.username == 'yourusername':
        if myappname in proc.cmdline:
            print 'App is running'
或者,Red Hat使用并维护一个名为Python linux procfs的Python模块,该模块本机解析/proc来管理进程。它并没有得到很好的宣传,但提供了一些额外的Linux特定特性(例如,调度类),这些特性有时很有用

探索哪一个是基于Python的Linux进程控制系统。它提供了一个基于web的UI,用于在崩溃时自动检查进程状态/启动/停止/重新启动。
还有一些插件,可以在进程崩溃的情况下发送邮件。

是的,我需要一个比手动解析PSP更高级的库。在shell中运行
ps
命令比tylerl关于使用/proc的说明要危险得多。相反,这样做。因为糟糕的做法会导致更糟糕的做法。首先运行
ps
命令。然后你想给它传递一些开关。然后可能是用户提供的筛选器字符串,然后您就有了一个根Web服务器。此外,它还鼓励使用
kill
,这也有同样的问题。不确定“鼓励使用kill”,因为存在os.kill,这意味着您永远不必使用实际的“kill”命令。然而,/proc的想法肯定比向ps抛出更好,我建议这样做而不是我的想法。
>>> import psutil
>>> pid = 1034  # some pid
>>> psutil.pid_exists(pid)
True
>>>
>>> p = psutil.Process(pid)
>>> p.is_running()
True
>>>
import psutil

for proc in psutil.get_process_list():
    if proc.username == 'yourusername':
        if myappname in proc.cmdline:
            print 'App is running'