近来开发的一个黄页爬虫, 因为要请求多个接口获取数据, 为了提高爬取效率, 所以使用了进程池去请求接口, 用的是multiprocessing.Pool创建进程池的方式.
当我把爬虫放到服务器上运行时, 我使用了
nohup python lei.py &
和
disown
命令让这个进程在后台运行,但发现有个问题:当我想结束它们时,我通过
ps aux|grep lei
找到了很多进程,例如我启动的进程池数量是30时,就会有30个进程id在搜索结果列表中,我执行 kill [父进程id]后, 有些子进程会被杀死, 但经常是杀不干净, 因为这些子进程也是独立于父进程的, 并不是说父进程结束了, 子进程就会跟着被杀死;
查了一番资料后, 发现用如下的方式可行, 很简单, 就两步:
ps aux|grep lei.py
结果行里带S1标记的第二列就是父进程id
如上图中, 278992 即是父进程
kill -TERM -<父进程PID>
在这个例子中, 执行的命令是
kill -TERM -278992
然后父进程和子进程都被杀死了