wxvirus wxvirus
首页
  • Go文章

    • Go语言学习
  • Rust

    • Rust学习
  • Java

    • 《Java》
  • Python文章

    • Python
  • PHP文章

    • PHP设计模式
  • 学习笔记

    • 《Git》
  • HTML
  • CSS
  • JS
  • 技术文档
  • GitHub技巧
  • 刷题
  • 博客搭建
  • 算法学习
  • 架构设计
  • 设计模式
  • 学习
  • 面试
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

无解的lifecycle

let today = new Beginning()
首页
  • Go文章

    • Go语言学习
  • Rust

    • Rust学习
  • Java

    • 《Java》
  • Python文章

    • Python
  • PHP文章

    • PHP设计模式
  • 学习笔记

    • 《Git》
  • HTML
  • CSS
  • JS
  • 技术文档
  • GitHub技巧
  • 刷题
  • 博客搭建
  • 算法学习
  • 架构设计
  • 设计模式
  • 学习
  • 面试
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • C&C++

  • PHP

    • PHP基础或常见方法

    • Laravel

    • ThinkPHP

    • PHP多进程编程

      • 程序与进程
      • PHP解释器的执行过程
        • PHP 解释器的工作大概流程
      • 进程环境
      • 解释器文件
      • 进程标识与fork
      • 进程退出
      • 进程exec
      • 进程调度
      • 多进程编写
      • SUID特权进程
      • 进程查看
      • 中断信号
      • 进程关系与守护进程
      • 进程组
      • 会话
      • 守护进程
      • 作业控制
      • 进程间通信
    • swoole

  • Python

  • Go

  • microservice

  • rust

  • Java

  • 学习笔记

  • 后端
  • PHP
  • PHP多进程编程
wxvirus
2022-03-31

PHP解释器的执行过程

# PHP 解释器的工作大概流程

php demo1.php
1

前面说了,我们的php解释器文件是ELF可执行文件

  1. Linux 内核调用execve函数,会把demo1.php作为命令参数传入
  2. 使用解释器去读取脚本文件,脚本文件是ascii text文本文件
  3. 运行完之后就会调用exit_group?(exit_status)来进程终止状态

可以使用size命令来查看ELF文件程序指令,程序数据所占空间的大小

可以使用strace -f -s65500 php demo1.php来查看执行的过程

# 第一行
execve("/usr/bin/php", ["php", "demo1.php"], 0x7fffad2331e8 /* 25 vars */) = 0

# 下面加载了一些其他的第三方库

# 下面部分

open("demo1.php", O_RDONLY)             = 3
getcwd("/data/work/php/process", 4096)  = 23

mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7efc8f74e000
# 解释运行
read(3, "<?php\n\necho \"hello world\";", 4096) = 26
close(3)                                = 0
munmap(0x7efc8f74e000, 4096)            = 0
# 打印内容 io 函数 没有缓冲区 向终端打印
write(1, "hello world", 11hello world)             = 11
# 退出 关闭标准输入
close(0)                                = 0
# 共享内存的释放
munmap(0x7efc80fb3000, 2176600)         = 0
munmap(0x7efc80d9a000, 2196680)         = 0
munmap(0x7efc8f637000, 192512)          = 0
munmap(0x7efc80b99000, 2097248)         = 0
munmap(0x7efc82aa6000, 4284872)         = 0
munmap(0x7efc82834000, 2560784)         = 0
munmap(0x7efc823d1000, 4596616)         = 0
munmap(0x7efc82184000, 2410688)         = 0
munmap(0x7efc81e9b000, 3050080)         = 0
munmap(0x7efc81c97000, 2109928)         = 0
munmap(0x7efc81a64000, 2302680)         = 0
munmap(0x7efc81854000, 2160296)         = 0
munmap(0x7efc81650000, 2109720)         = 0
munmap(0x7efc81429000, 2255216)         = 0
munmap(0x7efc811c7000, 2494984)         = 0
munmap(0x7efc8f6b7000, 196608)          = 0
munmap(0x7efc89400000, 2097152)         = 0
munmap(0x7efc8f596000, 659456)          = 0
munmap(0x7efc8f710000, 135168)          = 0
# 退出函数 退出状态码
exit_group(0)                           = ?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41

PHP解释执行过程

编辑 (opens new window)
上次更新: 2022/03/31, 22:00:42
程序与进程
进程环境

← 程序与进程 进程环境→

最近更新
01
vue3配合vite初始化项目的一些配置
07-26
02
网盘系统开发学习
07-24
03
linux多进程
06-19
更多文章>
Theme by Vdoing | Copyright © 2021-2024 wxvirus 苏ICP备2021007210号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式