V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
alwayshere
V2EX  ›  程序员

PHP 中怎样终止单个进程?

  •  
  •   alwayshere · 2017-01-13 10:09:50 +08:00 · 2246 次点击
    这是一个创建于 2876 天前的主题,其中的信息可能已经有所发展或是发生改变。

    目前因为要爬取大量数据, php 血统就是单线程的没办法,只能多弄几个进程来爬取数据,有时候一个进程会出错出现假死的情况,要停止我也只能把整个虚拟机停止了,这样也殃及了其它几个进程害得他们也被迫关闭,那么问题来了,我怎样把这个出错的 php 进程给关了,不伤害到其它 php 进程?

    9 条回复    2017-01-13 12:18:45 +08:00
    torbrowserbridge
        1
    torbrowserbridge  
       2017-01-13 10:12:47 +08:00
    不是 CLI 模式?为什么要停虚拟机?不懂。
    iyaozhen
        2
    iyaozhen  
       2017-01-13 10:48:28 +08:00 via Android
    ???虚拟机
    多进程的话,你 ps 一下,看哪个运行时间超长了就 kill 掉呗。或者程序自己也可以处理呀,找到为什么假死才是正道
    gouchaoer
        3
    gouchaoer  
       2017-01-13 11:08:14 +08:00
    不能再 php-fpm 里跑长期任务, ignore_user_abort 也不行, set_time_limit 也不行, memory_limit 还是不行,总之就是不行

    用 php-cli
    techmoe
        4
    techmoe  
       2017-01-13 11:25:22 +08:00 via Android
    cli 的话 ps 一下再 kill 一下不就行了
    难道 lz 的爬虫是在 fpm 里跑的吗。。
    xuxu
        5
    xuxu  
       2017-01-13 11:27:26 +08:00
    fork 子进程跑队列爬,直接跑那不找事吗?
    alwayshere
        6
    alwayshere  
    OP
       2017-01-13 12:00:02 +08:00
    @gouchaoer 为什么不行呢?我就是用 php-fpm 跑长期任务,挺好的啊?能解释一下原因么,谢谢
    lbp0200
        7
    lbp0200  
       2017-01-13 12:08:01 +08:00
    system("kill {$pid}");
    asktao
        8
    asktao  
       2017-01-13 12:08:58 +08:00
    拿到子进程 id kill 掉?
    gouchaoer
        9
    gouchaoer  
       2017-01-13 12:18:45 +08:00
    @alwayshere 因为我始终没法解决 php-fpm 中的进程退出问题,别的还好,我也是不信邪的类型
    基于 php 的任务队列处理,各框架也是专门针对 php-cli 应用做了路由和组件,这些也暗示了长期稳定任务的确要 php-cli
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5508 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 08:46 · PVG 16:46 · LAX 00:46 · JFK 03:46
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.