2-1程序与进程
文章目录
【注意】最后更新于 October 25, 2022,文中内容可能已过时,请谨慎使用。
2-1程序与进程
[[GCC 编译过程]]
程序
一般指可执行文件,可以使用 file 命令查看文件类型, 在 Linux 中,按 ELF 格式进行存储,并没有后缀
而对于 PHP/c/python/go 等源代码,都只是 ASCII/Unicode TEXT 文本文件
ELF Executable Linkable Format
ELF 文件种类
-
exec 可执行文件
-
REL 可重定位文件 xx.o xx.a 也成为静态库文件
xx.o 称为目标文件可被链接器链接生成为可执行文件,静态库文件,动态库文件
-
Shared Object File 共享目标文件 ,比如 PHP 的一些扩展 .so
-
core dump 接收到中断信号才会产生的文件
查看 ELF 文件属性
######## readelf 的安装
|
|
使用 readelf 命令 -h 参数 查看头
ELF 文件属性解释
参考 https://zhuanlan.zhihu.com/p/358951580
**magic 魔数 (EFL 标识码) **
7f 45 4c 46 : 对应的是 ACSII 码
02 : 表示 64 位机器,01 32 位
01 : 字节序 01 表示小端序 02 大端序
01: 主版本号
段 /节
ELF 文件的信息是以 节 Section 或 段 segment 来存储的
|
|
使用命令查看段的信息
objdump -h 参数 必须是 elf 文件类型 上面那几种
进程
一个正在被执行的程序就是一个进程,系统会给进程一个唯一的进程标识符, 进程 ID
一个正在使用的终端就是一个进程. 可以使用 echo $$
打印当前终端进程号 参考 shell 变量 https://www.cnblogs.com/barrychiao/archive/2012/10/22/2733210.html
如何启动一个程序
strace 系统调用
程序加载器 program load 会 使用 execve 方法来加载一个可执行文件,同时会给新程序传递 命令行参数 和 环境参数表
PHP 解释器的工作原理
使用 strace 跟踪 PHP 脚本执行过程
strace -f -s 65500 -o test.txt /usr/local/bin/php test.php
进程退出
- 运行到最后一行
- 遇到 exit ,return
- 中断信号
查看上次命令执行后的退出状态码
echo $?