目前因为要爬取大量数据, php 血统就是单线程的没办法,只能多弄几个进程来爬取数据,有时候一个进程会出错出现假死的情况,要停止我也只能把整个虚拟机停止了,这样也殃及了其它几个进程害得他们也被迫关闭,那么问题来了,我怎样把这个出错的 php 进程给关了,不伤害到其它 php 进程?
1
torbrowserbridge 2017-01-13 10:12:47 +08:00
不是 CLI 模式?为什么要停虚拟机?不懂。
|
2
iyaozhen 2017-01-13 10:48:28 +08:00 via Android
???虚拟机
多进程的话,你 ps 一下,看哪个运行时间超长了就 kill 掉呗。或者程序自己也可以处理呀,找到为什么假死才是正道 |
3
gouchaoer 2017-01-13 11:08:14 +08:00
不能再 php-fpm 里跑长期任务, ignore_user_abort 也不行, set_time_limit 也不行, memory_limit 还是不行,总之就是不行
用 php-cli |
4
techmoe 2017-01-13 11:25:22 +08:00 via Android
cli 的话 ps 一下再 kill 一下不就行了
难道 lz 的爬虫是在 fpm 里跑的吗。。 |
5
xuxu 2017-01-13 11:27:26 +08:00
fork 子进程跑队列爬,直接跑那不找事吗?
|
6
alwayshere OP @gouchaoer 为什么不行呢?我就是用 php-fpm 跑长期任务,挺好的啊?能解释一下原因么,谢谢
|
7
lbp0200 2017-01-13 12:08:01 +08:00
system("kill {$pid}");
|
8
asktao 2017-01-13 12:08:58 +08:00
拿到子进程 id kill 掉?
|
9
gouchaoer 2017-01-13 12:18:45 +08:00
@alwayshere 因为我始终没法解决 php-fpm 中的进程退出问题,别的还好,我也是不信邪的类型
基于 php 的任务队列处理,各框架也是专门针对 php-cli 应用做了路由和组件,这些也暗示了长期稳定任务的确要 php-cli |