如何使用php写守护进程
1、首选需要安装两个扩展pcntl 和 posix ,这两个扩展是在php自带库里的,就是前面安装php的时候下载的php解压后,在解压目录里的 ext 目录下寻找,然后安装。
下面见图示安装教程。
首先进入我们之前安装php的解压目录寻找这两个文件
cd /test
cd php/
cd php-7.1.4/
如下图所示列

2、先安装pcntl
cd pcntl
/usr/local/php7/bin/phpize
./configure --with-php-config=/usr/local/php7/bin/php-config

这里缺少autoconf 使用yum install autoconf 安装

然后make make install

安装完成
3、接下来安装posix (注,这里安装php的时候posix自动安装了,所以其实我这个环境不需要重新安装posix,如果没有的话,这里的演示一遍)
cd ../posix
/usr/local/php7/bin/phpize
./configure --with-php-config=/usr/local/php7/bin/php-config

make make install

然后加到php.ini文件里去

(注,这里安装php的时候posix自动安装了,所以其实我这个环境不需要重新安装posix,这里的ini文件只加入pcntl)
php -m

4、接下来测试代码 http://rango.swoole.com/archives/59
(这个代码链接是借用韩天峰大神的博客上面写的@韩天峰)
新建一个fb.php文件,写入下列代码
$pid = pcntl_fork();
if ($pid == -1){
die("fork(1) failed!n");
} elseif ($pid > 0){
//让由用户启动的进程退出
exit(0);
}
//建立一个有别于终端的新session以脱离终端
· posix_setsid();
$pid = pcntl_fork();
if ($pid == -1){
die("fork(2) failed!n");
} elseif ($pid > 0){
//父进程退出, 剩下子进程成为最终的独立进程
ini_set('default_socket_timeout', -1); //不超时
$redis = new Redis();
$redis->connect('127.0.0.1', 7200);
$result=$redis->subscribe(array('event*'), 'callback');
error_log(var_export(123,true));
//exit(0);
}
function callback($instance,$channelName,$message){
echo $message;
error_log(var_export( $message,true));
}这里自行开启redis服务,并新开一个窗口调试

使用ps -ef | grep fb.php 可以查看进程号

评论列表(0条)