前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >用python记录运行pid,并在需要时

用python记录运行pid,并在需要时

作者头像
py3study
发布2020-01-08 16:30:16
9000
发布2020-01-08 16:30:16
举报
文章被收录于专栏:python3python3

  我在跑爬虫程序的时候,由于爬虫程序的等待目标服务器返回数据的时间很长,而cpu占用很低,所以经常挂着代理一跑就跑好几百个。但是爬虫程序通常是写了死循环,或直到分配给该进程的任务都跑完才退出的。如果我们想中途结束掉这些任务,是没办法手工一个一个kill掉的。那么该如何结束这些进程呢?

  我的方法就是在运行爬虫进程时,记录该进程的Pid,然后在需要手动结束时,再用语句kill掉它们。

代码语言:javascript
复制
for i in {1..100}
do
    nohup python NetEase_comms_proxy.py > hehe.dat 2>&1 & echo $! >> run.pid
    sleep 10
done

上述语句完成了将脚本在后台运行100便,并且将pid append到run.pid文件中。其中nohup 是 no hang up的缩写命令。do…done之间是被循环的语句。

  接下来就是kill掉它们的语句了,我用的python

代码语言:javascript
复制
import os

if __name__ == '__main__':
    fin = open('run.pid', 'r')
    pids = []
    for line in fin:
        pids.append(line.strip())
    for pid in pids:
        cmd = 'kill ' + pid
        os.system(cmd)

这样就把记录下来的pid全部kill掉了。 但需要注意的一点时,如果在任务运行期间,有的进程由于完成任务或者出错而退出。其他的程序可能会share这些进程的Pid,这样如果在运行kill脚本的时候,可能附带就把这些进程也给Kill掉了,造成不必要的麻烦。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-09-07 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档