• Process->start
    • 实例

    Process->start

    执行fork系统调用,启动进程。

    1. function swoole_process->start() : int

    创建成功返回子进程的PID,创建失败返回false。可使用swoole_errnoswoole_strerror得到错误码和错误信息。

    • $process->pid 属性为子进程的PID
    • $process->pipe 属性为管道的文件描述符
    • 子进程会继承父进程的内存和文件句柄
    • 子进程在启动时会清除从父进程继承的EventLoopSignalTimer
    执行后子进程会保持父进程的内存和资源,如父进程内创建了一个redis连接,那么在子进程会保留此对象,所有操作都是对同一个连接进行的。

    实例

    1. $redis = new $redis;
    2. $redis->connect('127.0.0.1', 6379);
    3. function callback_function () {
    4. swoole_timer_after(10000, function () {
    5. echo "hello world";
    6. });
    7. global $redis;
    8. };
    9. swoole_timer_tick(1000, function () {
    10. echo "parent timer\n";
    11. });
    12. swoole_process::signal(SIGCHLD, function ($sig) {
    13. while ($ret = Swoole\Process::wait(false)) {
    14. // create a new child process
    15. $p = new Swoole\Process('callback_function');
    16. $p->start();
    17. }
    18. });
    19. // create a new child process
    20. $p = new Swoole\Process('callback_function');
    21. swoole_event_add($p->pipe, function ($pipe) use ($p) {
    22. echo $p->read();
    23. });
    24. $p->start();
    • 子进程启动后会自动清除父进程中swoole_timer_tick创建的定时器、swoole_process::signal监听的信号和swoole_event_add添加的事件监听
    • 子进程会继承父进程创建的$redis连接对象,父子进程使用的连接是同一个