用于Linux进程pipe理的Python库

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

我现有的网站是基于Python的,运行在Linux服务器上,所以你知道一个合适的库支持这个function吗?

谢谢

Solutions Collecting From Web of "用于Linux进程pipe理的Python库"

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

>>> import psutil >>> pid = 1034 # some pid >>> psutil.pid_exists(pid) True >>> 

…或者这个(它也将检查PID是否被重用):

 >>> p = psutil.Process(pid) >>> p.is_running() True >>> 

通过查看/ proc目录的内容来检查正在运行的进程列表(即使是像“ps”这样的核心实用程序)。

因此,你对查询正在运行的进程感兴趣的库与用于处理任何其他文件和目录(即sysos ,取决于你之后的口味)是一样的,但是要特别注意os.path ,它会完成大部分的工作)。 要终止或以其他方式与进程进行交互,您需要向os.kill发送信号。 最后,你使用os.popen和朋友开始新的进程。

既然你说这是一个Linux服务器,调用外部ps二进制文件通常比较慢,比直接使用/ proc的信息更耗费资源,更容易出错。

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

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

祝你好运。

这是我使用的。 它使用procfs(所以你只限于Unix系统,不会在Mac上工作,我认为)和前面提到的glob。 它也得到了cmdline,它可以让你识别过程。 为了杀死进程,你可以使用os.kill(signal.SIGTERM, pid) 。 对于使用子进程 ,请检查这个帖子Python,Popen并选择 – 等待进程终止或超时

 def list_processes(): """ This function will return an iterator with the process pid/cmdline tuple :return: pid, cmdline tuple via iterator :rtype: iterator >>> for procs in list_processes(): >>> print procs ('5593', '/usr/lib/mozilla/kmozillahelper') ('6353', 'pickup -l -t fifo -u') ('6640', 'kdeinit4: konsole [kdeinit]') ('6643', '/bin/bash') ('7451', '/usr/bin/python /usr/bin/ipython') """ for pid_path in glob.glob('/proc/[0-9]*/'): # cmdline represents the command whith which the process was started f = open("%s/cmdline" % pid_path) pid = pid_path.split("/")[2] # get the PID # we replace the \x00 to spaces to make a prettier output from kernel cmdline = f.read().replace("\x00", " ").rstrip() f.close() yield (pid, cmdline) 

os模块可能是你的朋友。 有os.kill ,例如杀死一个进程。

就获取进程列表而言,您可能需要使用ps命令。 这个问题有更多的信息。

Python子进程http://docs.python.org/library/subprocess.html可能会帮助你。 如果使用子进程创建进程,则可以使用Popen.terminate()函数来停止它。

我会用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特有的功能(例如,调度类),有时是有用的。

http://pkgs.fedoraproject.org/gitweb/?p=python-linux-procfs.git