一、解释器文件
解释器是elf程序 解释器文件,文本文件,php代码就是解释器文件
#! /usr/bin/php
<?php
echo posix_getpid(); // 获取当前进程
二、bash进程启动过程
通过strace 监听进程
- sshd 服务守护进程监听 socket select accept
- client 连接服务器
- sshd 服务获取连接信息,clone sshd进程 用来收发单个连接的数据
- 运行bash解释器 execve
- bash解析 命令执行
- execve 根据 文件head 判断是可执行文件还是 解释器文件。
- 解释器文件就尝试找第一行写的解释器,然后加载解释器程序去运行。
通过strace 监控对应的sshd进程,可以看到数据交互的过程
strace -s -f 6550 -o a.log -p pid
- 客户端发送指令
- sshd接受指令并发给子进程bash
- bash执行并获取结果返回给 sshd execve 获取命令执行,程序或者脚本
- sshd 返回给客户端