求Php多进程编程高手解决一个小问题. - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
Actrace

求Php多进程编程高手解决一个小问题.

  •  
  •   Actrace 2013 年 4 月 2 日 3299 次点击
    这是一个创建于 4771 天前的主题,其中的信息可能已经有所发展或是发生改变。
    写了一个任务派发(使用进程来进行异步任务派发)管理库,不过在派发任务的时候出现了一点问题....

    为了平滑结束所有子任务,使用信号来发送到子进程通知调用子进程的结束方法.

    设计上应该是这样的,,,
    1,进程1创建.
    2,进程1创建了进程2,进程1退出.
    3,进程2创建了进程3,进程2作为守护进程持续运行,进程3也持续运行.

    4,进程4创建.
    5,进程4发送信号到进程2,通知进程2退出,等待进程2结束.
    6,进程2的结束方法通知进程3退出,等待进程3结束.
    7,进程3的结束方法打印日志后结束自身.
    8,进程2结束.
    9,进程4结束.

    实际上在第6步出现了问题.进程2通知进程3结束,但是进程3没有执行指定的结束方法,而是触发了任务管理库的通知子进程结束的方法,这个方法不是任务管理库在初始化的时候绑定的信号回调触发方法.但是进程2却能够正常执行信号回调的触发方法调用进程2的结束方法,虽然这两个进程都结束了,但是进程3里面的结束方法没有被执行,,,这样就无法进行进程3的收尾工作.

    头大了.求大神,
    5 条回复    1970-01-01 08:00:00 +08:00
    Actrace
        1
    Actrace  
    OP
       2013 年 4 月 2 日
    补充一下,这是PHP程序...写来做后端服务的.
    Actrace
        2
    Actrace  
    OP
       2013 年 4 月 2 日
    为什么没有人回答,,这是我最后的希望了,,,,吐槽一下也好啊...
    sailxjx
        3
    sailxjx  
       2013 年 4 月 2 日
    进程2作为进程3的父进程,没有wait子进程的状态而是继续执行自己的任务,那么进程3结束的时候应该变成一个僵尸了,也就没法实现正常的shutdown方法了。

    如果仅仅是为了实现异步,应该没必要采用这种多进程的方式,http://reactphp.org/这里有个老外实现的php异步框架,利用标准库中的stream_socket来实现事件的监听和异步触发,应该可以满足需求了。
    Actrace
        4
    Actrace  
    OP
       2013 年 4 月 2 日
    @sailxjx 这是一个CLI程序.进程3任务结束后会回收自己.现在的问题是进程2通知进程3结束,但是进程3收到信号后回调的地方不对!进程3发生回调的位置是进程2的结束方法!
    Actrace
        5
    Actrace  
    OP
       2013 年 4 月 2 日
    问题已经自行解决了....人道一些还是把解决方案和问题所在贴出来吧.
    PHP的信号安装虽然可以使用对象方法,但是不可重新设定,因此异步任务派发管理类是不能设计成可实例化的类,必须是静态类才能够完整地对所有异步任务进行控制.依旧需要使用共享内存来控制进程间的信息交互,文件是不可靠的!
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3042 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 53ms UTC 06:28 PVG 14:28 LAX 23:28 JFK 02:28
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86