3-1进程标识与fork

进程标识 一个程序被加载到内存中运行,系统会为这个进程分配相应的标识信息,比如 pid,ppid,uid,euid,pgid,sid,gid,egid… 进程查看命令 pstree 可看出进程间的关系 父子,兄弟; ps -exj ps -aux ps … PID PPID PGID UID TTY STAT TIME COMMAND laradock@3a6c2da5a07b:/var/www$ ps exj PPID PID PGID SID TTY TPGID STAT UID TIME COMMAND 0 24 24 24 pts/1 495 Ss 1000 0:00 bash PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/home/larado 24 495 495 24 pts/1 495 R+ 1000 13:37 php demo4.php LC_ALL=en_US.UTF-8 NVM_DIR=/home/laradock/.nvm LS_COLORS=no=00:fi=00: 0 496 496 496 pts/2 1051 Ss 1000 0:00 bash PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/home/larado 496 1051 1051 496 pts/2 1051 R+ 1000 0:00 ps exj LC_ALL=en_US....

2022-02-28 · 王二

2-3解释器文件

解释器文件 解释器文件,是一种文本文件,例如 PHP 写的解释器文件 demo.php。 #!/usr/bin/php <?php echo 'Hello World!' chmod u+x demo.php 赋予可执行权限,即可直接以 ./demo.php 执行。 解释器,是可执行文件 ELF,例如 /usr/bin/php。 bash 进程启动过程 bash 进程是如何创建的? 直接在 centos、ubuntu等终端直接登录,由 login 服务开启 bash 进程。 通过网络方式登录到 shell 终端,由 sshd 服务开启 bash 进程。 sshd 服务默认监听 22 端口。 进程观察的几个命令: pstree 查看 Linux 进程间的关系,显示进程树。 pstree -ap: ├─sshd,9408 │ └─sshd,444836 │ └─bash,444875 │ └─pstree,444893 -ap ctrl+c 产生一个中断信号,退出当前终端正在执行的进程。 ctrl+z 把当前台进程丢到后台去暂停。 strace,跟踪系统调用和信号。...

2022-02-18 · 王二

2-2命令行参数与环境参数表

命令行参数 php 两种请求方式: 浏览器请求过程: http://127.0.0.1/demo2.php 浏览器访问 —> tcp 协议请求 —> Apache/Nginx[集成环境]web服务器 —> php-fpm 服务 cli 请求: php demo2.php a b c d cli 是直接在终端调用 php 解释器。 其中 [a,b,c,d] 就叫命令行参数。 环境参数表 当前 bash 进程调用 execve 函数传递进来的参数。 print_r(getenv());

2022-02-17 · 王二

2-1程序与进程

什么是程序? ELF 概念 程序(Program) 一般是指可执行文件,在Linux系统中它按 ELF 格式进行存储,并没有后缀可标识其文件类型,需要通过 file 命令来查看 ELF 文件的具体类型。 ELF 全称是 Executable Linkable Format (可执行与可链接格式),在计算机科学中,是一种用于二进制文件、可执行文件、目标代码、共享库和核心转储格式文件。是UNIX系统实验室(USL)作为应用程序二进制接口(Application Binary Interface,ABI)而开发和发布的,也是Linux的主要可执行文件格式。 ELF文件种类: EXEC 可执行文件 object code 目标代码文件 shared libraries 共享库文件 REL 可重定位文件 在Linux中为 xx.o xx.a,也称为静态库文件,其中 xx.o 称为目标文件,可被链接器链接成为可执行文件,静态库文件,动态库文件。 示例:php扩展中常用的动态库文件如curl,网络框架库如event.so socket扩展库sockets.so c/c++项目程序员一般引用第三方的库函数都是使用第三方编译好的动态库或是静态库文件 .so, .a。 core dump 核心转储文件 存储进程产生的异常信息。是操作系统在进程收到某些信号而终止运行时,将此时进程地址空间的内容以及有关进程状态的其他信息写入一个磁盘文件。这种信息往往用于调试。 ELF 文件格式 ELF 文件信息是以 section 或 segment 来存储的。...

2022-02-16 · 王二

1-1课程介绍

课程简介 本课程内容涵盖了 Linux 下 ELF 文件、进程、进程控制原语、进程调度算法、中断信号系统、Linux bash 进程与终端、进程、特权进程、守护进程、会话、进程间通信、UNIX域进程间通信、进程间同步、进程池等知识技术点。 课程测试环境 ubuntu 20.04 php 7.x VScode 课程需要有哪些基础知识 PHP使用1年以上 能独立编译安装PHP和相关扩展 对Linux基础命令有所了解 不浮躁有足够的耐心学习知识 会使用翻译工具,爱百度google的同学^_^ 大其心,容天下之物;虚其心,受天下之善;平其心,论天下之事;潜其心,观天下之理;定其心,应天下之变。 ——— 《呻吟语·卷二·乐集·修身》 如今新兴语言层出不穷,我还有必要学PHP? 本套课程集中于 Linux 下多进程编程知识,虽然使用 PHP 来演示讲课,但在讲解中,会涉及到内核系统调用函数的说明,因为Linux内核系统调用对于所有的编程语言都是通用的。也就是说大家换一门其它编程语言,在本套课程所学到的知识都能完全应用到其它语言中,除非大家换了Linux操作系统,或是Linux操作系统的实现不使用C语言了。这也是本套课程的目标。让大家掌握方法以便能深入的研究 Linux 的 API(C 语言定义好的接口函数)。 go,python,nodejs,java,php rust,… 不论应用使用何种编程语言,底层的系统调用函数完全一致。 例如 PHP 的 pcntl_fork 底层调用的系统函数:fork,clone 课程适合哪些人? 以下列出几点小问题如果您感兴趣,则本套课程将非常适合您! PHP 解释器是什么类型的文件?我怎么查看它?为什么我在终端执行 php index.php 它就执行了?从哪里开始执行的?到哪儿结束呢? elf 文件; 通过 file /usr/bin/php 查看;...

2022-02-15 · 王二

Ecshop 4.0 微信登录 一直循环授权登录

部署 ecshop 4.0 H5端,发现循环弹出微信授权登录,初步判断是登录状态问题,和前端联调发现前端拿不到 cookie,api 接口(api.test.demo)给 h5端(h5.test.deom) 设置 cookie,直接给 h5.test.demo 设置,cookie不会生效,只能给主域 test.demo 设置才会生效。 查看微信登录回调接口 appserver\app\Http\Controllers\v2\UserController.php 中的 webCallback 方法, if (isset($_GET['referer'])) { Log::info('微信认证回调成功', $data); if (isset($data['openid'])) { Log::info('设置的cookie为' . config('app.domain_url')); setcookie('o', $data['openid'], time()+7200, '/', config('app.domain_url')); } if (isset($data['token'])) { setcookie('t', $data['token'], time()+7200, '/', config('app.domain_url')); } return redirect(urldecode($_GET['referer'])); } 可以看到是给 domain_url 设置cookie 所以需要注意 appserver/.evn 中的 DOMAIN_URL 配置 #商城Domain (此处必须为主域名,设置二级域名无效,api域名、H5域名必须为此主域下的域名) DOMAIN_URL=test.demo #商城url SHOP_URL=http://h5.test.demo #分享url SHARE_URL=http://:h5.test.demo/h5 #H5商城 SHOP_H5=http://h5.test.demo/h5

2019-03-14 · 王二

PHP判断指定日期是否为工作日

PHP 借助百度接口判断指定日期是否为工作日

2018-12-08 · 王二

PHP Ajax 跨域请求允许多个域名

PHP Ajax 跨域请求允许多个域名

2018-02-26 · 王二

返回键劫持,强制跳转到指定链接

返回键劫持,强制跳转到指定链接 代码如下: window.onhashchange=function(){jp();}; function hh() {history.pushState(history.length+1, "message", "#"+new Date().getTime());} function jp() {location.href="/jump.php";} setTimeout('hh();', 50);

2018-01-29 · 王二

批量检查并清除BOM头

经常碰到各种头疼问题,网页空白不显示等等,好多情况下都是BOM头引起的,但是又不知道是哪个文件有BOM头,于是搜了一下,发现一个批量检查并自动清除BOM头的工具,分享给大家。 <?php if (isset($_GET['dir'])){ //设置文件目录 $basedir=$_GET['dir']; }else{ $basedir = '.'; } $auto = 1; checkdir($basedir); function checkdir($basedir){ if ($dh = opendir($basedir)) { while (($file = readdir($dh)) !== false) { if ($file != '.' && $file != '..'){ if (!is_dir($basedir."/".$file)) { echo "filename: $basedir/$file".checkBOM("$basedir/$file")." <br>"; }else{ $dirname = $basedir."/".$file; checkdir($dirname); } } } closedir($dh); } } function checkBOM ($filename) { global $auto; $contents = file_get_contents($filename); $charset[1] = substr($contents, 0, 1); $charset[2] = substr($contents, 1, 1); $charset[3] = substr($contents, 2, 1); if (ord($charset[1]) == 239 && ord($charset[2]) == 187 && ord($charset[3]) == 191) { if ($auto == 1) { $rest = substr($contents, 3); rewrite ($filename, $rest); return ("<font color=red>BOM found, automatically removed....

2015-06-30 · 王二