php多进程编程总结

1.pcntl_fork 在父进程执行线程内返回产生的子进程的PID,在子进程执行线程内返回0。失败时,在 父进程上下文返回-1,不会创建子进程,并且会引发一个PHP错误。

这个函数用来生成子进程,如果生成成功,父进程里面返回的是它所生成的子进程的id,子进程里面返回的是0,如果父进程返回为-1就是创建子进程失败,根据返回的pid值可以判断,当前是父进程还是子进程

2.进程在运行后如果要接受来自其它进程包括自己进程的信息就需要向其发送信号,保存到操作系统中,在发送信号后,进程需要主动去查询信号,并调用相应的信号处理函数,在处理完后返回正常的执行流程。这些过程都需要代码控制和实现。php发送信号的函数主要有posix_kill(),这个函数可以向指定的进程发送特定的信号.根据我的理解,发送信号一般是生成信号信息给操作系统。在php绑定信号处理的函数为pcntl_signal(),当该进程查询到对应的信号时就是调用绑定的函数,SIG_IGN指示对当前的信号不做任何处理。php查询信号的函数为pcntl_signal_dispatch,当前进程调用该进程后会去操作系统查询有没有发送自己的信号,如果有,就找出该信号绑定的处理函数,如果找到就按照处理函数进程处理,如果没有找到就按照系统默认的处理方式进行处理.

3.主进程生成子进程后如果子进程想要在在关闭终端后能一直运行就需要调用posix_setsid.当终端退出后,如果子进程有向屏幕终端打印数据的行为将会导出php发生错误,进而导致该进程退出,为了防止这种情况的发生,可以在代码中不写var_dump等向屏幕终端输出的函数。但是由于平时的习惯,总是喜欢写一些向屏幕终端输出的函数,难免会导致终端退出后程序运行报错终止。既然错误是由于关闭终端后可能向屏幕终端而导致的,我们就可以更改默认输出端,把它重定向为/dev/null,也就是将数据丢底不管,这样即使代码中存在var_dump等原来向屏幕输出的函数,在终端关闭后也不会有任何影响,只是将输出扔掉了而已。

4.进程运行后为了便于区分可以调用cli_set_process_title为进程设置一个标题

5.为了程序的高效运行和高稳定性,一般都是一个主进程多个子进程的模式,主进程用来监管控制子进程,子进程未来执行具体的业务。当子进程意外退出时,会向主进程发送退出的消息,主进程收到对应的消息后,立即生成一个新的子进程处理业务。从而维持程序的稳定和高效。php用pcntl_wait ( int &$status [, int $options = 0 ] ) : int函数来获取退出的进程的pid和退出的状态,主进程根据pid和status做相应的处理。注意该函数会使当前主进程挂起,阻塞,知道某个他的子进程退出,或者是收到一个中断当前当前进程的信号或者是调用一个信号处理函数时该函数才会返回.

6.有时程序运行有必要知道自己的进程id可以使用posix_getpid函数获取自己的pid

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值