用Python监视进程是否结束
时间:2010-12-20 来源:chick
不知道有什么简便的方法可以实现,只想到了用Python写个小脚本(过去一直用Python来解决一些小问题),于是去网上搜了Python相关的类库,其中os.system函数可以调用Linux命令,初步想了下,准备用一个线程来不断执行ps命令,并检查VirtualBox的进程是否还存在,如果不存在了,就执行halt。
不过尝试了一下用os.system调用ps后,输出的结果无法保存到变量中,看了一个帖子,发现os.popen可以解决,os.popen可以像打开文件一样执行一条Linux命令,命令返回的结果可以通过读取文件的方式获得。
通过ps ax|grep VirtualBox|grep xp的组合命令可以得到正在执行xp的虚拟机进程,其中xp是自己设定的虚拟机的标题,一般得到的结果会有2条,1条就是虚拟机进程,另1条是grep命令本身,所以当得到的结果只剩下grep命令本身时,说明虚拟机已经关闭。
由于我用的Linux发行版是Ubuntu,执行关机命令需要sudo并且输入密码,所以要让自动关机能够实现还有一步是,设定用户执行sudo不需要输入密码,这可以通过sudo visudo对sudoers文件进行修改,在文件最后加上chocobo ALL=(ALL) NOPASSWD: ALL其中chocobo是用户名。
好了,准备工作都做完,就可以执行脚本监视进程啦,具体代码如下:
PYTHON#!/usr/bin/env python import osimport time def autohalt(): while True: ps_string = os.popen('ps ax | grep VirtualBox | grep xp','r').read() ps_strings = ps_string.strip().split('\n') if len(ps_strings) < 2: os.system('sudo halt') return else: print 'Still',len(ps_strings),'Processes, waiting 10s...' time.sleep(10) if __name__=='__main__': autohalt()
参考资料:
- http://docs.python.org/library/os.html#os.system
- http://docs.python.org/library/os.html#os.popen
- http://maestric.com/doc/unix/ubuntu_sudo_without_password
相关阅读 更多 +