多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
# Process->start [TOC] 执行`fork`系统调用,启动进程。 ~~~ function swoole_process->start() : int ~~~ 创建成功返回子进程的`PID`,创建失败返回`false`。可使用`swoole_errno`和`swoole_strerror`得到错误码和错误信息。 * `$process->pid`属性为子进程的`PID` * `$process->pipe`属性为管道的文件描述符 * 子进程会继承父进程的内存和文件句柄 * 子进程在启动时会清除从父进程继承的`EventLoop`、`Signal`、`Timer` > 执行后子进程会保持父进程的内存和资源,如父进程内创建了一个redis连接,那么在子进程会保留此对象,所有操作都是对同一个连接进行的。 ## 实例 ~~~ $redis = new $redis; $redis->connect('127.0.0.1', 6379); function callback_function () { swoole_timer_after(10000, function () { echo "hello world"; }); global $redis; }; swoole_timer_tick(1000, function () { echo "parent timer\n"; }); swoole_process::signal(SIGCHLD, function ($sig) { while ($ret = Swoole\Process::wait(false)) { // create a new child process $p = new Swoole\Process('callback_function'); $p->start(); } }); // create a new child process $p = new Swoole\Process('callback_function'); swoole_event_add($p->pipe, function ($pipe) use ($p) { echo $p->read(); }); $p->start(); ~~~ * 子进程启动后会自动清除父进程中`swoole_timer_tick`创建的定时器、`swoole_process::signal`监听的信号和`swoole_event_add`添加的事件监听 * 子进程会继承父进程创建的`$redis`连接对象,父子进程使用的连接是同一个