我们很多时候做客户端爬虫的时候,或者是在Windows上做项目的时候,我们都需要对目标进程进行监控,在目标进程出现异常的时候对我们的爬虫进行相应的异常处理。
当时做这个的时候思路比较局限,可能是因为自己old school风格的原因吧,就想着怎么去做Windows编程,去请求系统的API,后面发现如果是去请求系统的API的话,第一是过程比较复杂,第二是在python方面,对Windows的一些介绍也比较少,像win32,win32api之类的,很多资料都不齐全,因为这些资料很多时候是面对有Windows编程有需要,或是对Windows编程比较有经验的人用的,入门的比较少。
后面搞的时候还是请教了一些大佬,其中一个搞安全的大佬给了一个思路,你试试用安全的角度去考虑这个功能的实现。也要感谢自己当时在安全的路上跌跌撞撞的走过几年吧,这样一样就有了一个解决的思路,虽然比较猥琐,做了一下搬砖的工作,还是比较快解决的。用到了一个名叫psutil的模块。更多的详情,可以参考psutil的github主页psutil,功能还是很多很强大的。
惯例,直接上代码,代码注释非常的清晰。因为这个是工作中用到的一个模块,我用类进行了封装。对于进程名,因为工作问题我隐去了,换成了一个QQ的进程。
|
|
psutil中定义的进程的状态有这几种,当然,我们也可以用字符串去代替他的状态情况。状态的字符串就是STATUS_后面的名字换成小写字母即可。()中提示的是适用的系统。
psutil.STATUS_RUNNING
psutil.STATUS_SLEEPING
psutil.STATUS_DISK_SLEEP
psutil.STATUS_STOPPED
psutil.STATUS_TRACING_STOP
psutil.STATUS_ZOMBIE
psutil.STATUS_DEAD
psutil.STATUS_WAKE_KILL
psutil.STATUS_WAKING
psutil.STATUS_IDLE(OSX, FreeBSD)
psutil.STATUS_LOCKED(FreeBSD)
psutil.STATUS_WAITING(FreeBSD)
psutil.STATUS_SUSPENDED(NetBSD