通過我的Web界面,我想啓動/停止某些進程並確定啓動的進程是否仍在運行。用於Linux進程管理的Python庫
我現有的網站是基於Python並運行在Linux服務器上的,所以你知道一個合適的庫支持這個功能嗎?
謝謝
通過我的Web界面,我想啓動/停止某些進程並確定啓動的進程是否仍在運行。用於Linux進程管理的Python庫
我現有的網站是基於Python並運行在Linux服務器上的,所以你知道一個合適的庫支持這個功能嗎?
謝謝
啓動/停止蟒子流程,您可以使用子模塊。 要檢查它們是否正在運行您可以使用psutil:
>>> import psutil
>>> pid = 1034 # some pid
>>> psutil.pid_exists(pid)
True
>>>
...或者這個(它也將檢查PID已經被重複使用):
>>> p = psutil.Process(pid)
>>> p.is_running()
True
>>>
os模塊可能是你的朋友。有os.kill
,例如殺死一個進程。
就獲取進程列表而言,您可能需要剔除ps
命令。 This question有更多的信息。
通過查看/ proc目錄的內容來檢查正在運行的進程列表(即使是像「ps」這樣的核心實用程序)。
這樣,當用於與任何其他文件和目錄(即sys
或os
工作,這取決於你的後味,你有興趣查詢正在運行的進程庫是一樣的。要特別注意os.path
不過,它會完成大部分的工作)。要終止或以其他方式與進程進行交互,請發送它們的信號,這些信號通過os.kill
完成。最後,你開始使用os.popen
和朋友的新流程。
Python子進程http://docs.python.org/library/subprocess.html可能會幫助你。如果使用子進程創建進程,則可以使用Popen.terminate()函數來停止它。
既然你說這是一臺Linux服務器,調用外部PS二進制通常比較慢,使用更多的資源,更錯誤不是使用/直接PROC的信息容易。
既然誰也提到,一個簡單的方法是:
glob.glob('/proc/[0-9]*/')
好運。
這就是我使用的。它使用procfs(所以你只限於Unix系統,不會在我認爲的mac上工作)和前面提到的glob。它也得到了cmdline,它可以讓你識別這個過程。爲了殺死這個過程,你可以使用os.kill(signal.SIGTERM, pid)
。對於使用子進程,請查看這篇文章Python, Popen and select - waiting for a process to terminate or a timeout
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)
我會用PSutil。以提供一個實際的例子:
import psutil
for proc in psutil.get_process_list():
if proc.username == 'yourusername':
if myappname in proc.cmdline:
print 'App is running'
或者,紅帽使用和維護稱爲蟒-Linux的PROCFS一個Python模塊,其中本地解析/ PROC,管理進程。它不是很好公開,但提供了一些額外的Linux特有的功能(例如,調度類),有時是有用的。
http://pkgs.fedoraproject.org/gitweb/?p=python-linux-procfs.git
是啊,我以後最好比手動解析PS – hoju 2009-11-10 01:43:15
運行殼內'ps'命令一個更高的層次庫是一個很多比約使用/ proc tylerl注更危險。相反。 – 2009-11-10 01:43:34
它怎麼會危險? – hoju 2009-11-10 01:44:41