请教如何判断popen()运行的外部程序已终止

请教如何判断popen()运行的外部程序已终止

我写了个GUI小程序,需要用popen()运行一个外部GUI程序,需要在这个程序结束的时候备份这个程序的数据。
现在用popen() 和atexit.register() 方法只有我的整个IDE推出后,这个备份才运行,请问有没有什么好方法。

另外,我需要这个程序一次只运行一个,现在处理的方法是,程序开始建立一个temp文件,程序结束删除这个temp文件,用判断文件是否存在的方式判断是否已运行一个程序,但是如果程序非正常退出就不会删除这个temp文件,也就不能运行了。
有没有什么方法能够得到系统进程名称列表,我可以用进程列表来判断程序是否已经运行。
谢谢。
你是用什么实在GUI的?是wxPython吗?

记得wxPython有自己实现单个实例的方法
我就用wxpython
http://wiki.wxpython.org/index.cgi/OneInstanceRunning

windows下查看进程可以使用python win32 extension

[Copy to clipboard] [ - ]
CODE:
import win32pdh
win32pdh.EnumObjects(None, None, win32pdh.PERF_DETAIL_WIZARD)
junk, instances = win32pdh.EnumObjectItems(None, None,
    'Process', win32pdh.PERF_DETAIL_WIZARD)
instances = map((lambda s: string.lower(s)), instances)
if instance in instances:
    print 'running'

我试了一下,不用判断是否结束了,把备份语句放在popen()后面就可以。