(1).基本的写入(a.php)
//(1.1).创建一个IPC通信专用的KEY
$shm_key = ftok(__FILE__, 't');
//(1.2).创建或者打开共享内存块,创建1KB
$shmop = shmop_open($shm_key, 'c', '0644', 1024);
if (!$shmop) {
throw new Exception('创建共享内存失败');
}
//(1.3).向内存写入数据
$text = 'A:大家好,我是A进程,我创建的内存空间啊,欢迎大家一起来耍啊';
if (!shmop_write($shmop, $text, 0)) {
throw new Exception('共享内存写入数据失败');
}
//(1.4).用完关闭资源(并不会清除内存数据,只关闭资源句柄)
shmop_close($shmop);
//(1.5).输出共享内存块的系统ID,我的是1948581891,php打印的是int值,底层用的16进制
echo dechex($shm_key) . PHP_EOL;(2).基本的读取(b.php)
//(2.1).打开A进程创建的共享内存
$shm_key = 0x74250004;
$shmop = shmop_open($shm_key, 'c', '0644', 1024);
if (!$shmop) {
throw new Exception('打开共享内存失败');
}
//(2.2).从内存读取数据
$data = shmop_read($shmop, 0, 1024);
file_put_contents('1.txt', $data);
echo "b进程读取到的消息为:" . $data . PHP_EOL;
//(2.3).删除共享内存.不需要close.直接删除
shmop_delete($shmop);(3).注意事项
通过ipcs -m 命令可以查看已经创建的共享内存
通过ipcrm -M key 命令可以删除通过shm_key创建的共享内存
共享内存不会因为进程退出而丢失,会一直存在系统中,除非删除它
<!doctype html> <html> <head> <meta charset="utf-8"> <title>demo</title> </head> <bod...
主要原理是通过PHP创建多个子进程,在子进程中发送进程闹钟信号,然后再监听闹钟信号中继续发送闹钟信号。同时通过父进程设置非阻塞运行。代码如下:<?php /** * 订单任务 */ class Order { &n...
<?php /** * daemonize让当前脚本为守护进程执行 * @param string $callback 匿名函数 */ function daemonize($callback) {...
<?php //php7+ define('CONFIG', [ 'MYSQL' => '127.0.0.1',  ...
当我想在一个进程中监听kill 和 kill -9命令报了这个错误。//监听kill pcntl_signal(SIGTERM, function () { posix_kill(0, SIGTERM); });...
posix_ttyname - 获取当前终端设备名称。<?php var_dump( posix_ttyname(STDOUT) );我们启动一个终端,执行上面的代码输出:/dev/tty1我们再启动一个终端,执行上面的代码输...