2-3解释器文件
文章目录
【注意】最后更新于 October 25, 2022,文中内容可能已过时,请谨慎使用。
2-3解释器文件
解释器文件
是一种文本文件, 如 php写的解释器文件,python/shell解释器文件
解释器 是可执行文件ELF
如PHP解释器文件 新建 bash.php
|
|
可以通过像执行脚本文件(.sh)一样直接运行
|
|
在解释器文件开头必须指明解释器所在的绝对路径
如何启动的
为什么可以使用这种方式启动呢,使用 strace进行调试,发现execve的第一个参数说明
此处观察并不明显,我们再使用PHP解释器直接运行脚本并跟踪,对比execve函数的说明即可明白
|
|
execve()
pathname must be either a binary executable, or a script starting
with a line of the form:
##!interpreter [optional-arg]
第一个参数必须是一个可执行二进制文件,或一个脚本文件
bash进程是如何启动的
- 直接在centos终端登录, login服务去开启bash进程(物理机)
- 使用网络方式登录shell终端,由sshd服务区开启bash进程
sshd服务监听22端口
进程观察的命令
-
pstree 查看进程树关系
-a:显示每个程序的完整指令,包含路径,参数或是常驻服务的标示;
-c:不使用精简标示法;
-G:使用VT100终端机的列绘图字符;
-h:列出树状图时,特别标明现在执行的程序;
-H<程序识别码>:此参数的效果和指定”-h"参数类似,但特别标明指定的程序;
-l:采用长列格式显示树状图;
-n:用程序识别码排序。预设是以程序名称来排序;
-p:显示程序识别码;
-u:显示用户名称;
-U:使用UTF-8列绘图字符;
-V:显示版本信息。
配合 $$ 名称查看当前的bash进程,或者在开一个窗口创建一个新的ssh连接,再次使用 pstree命令会发现sshd进程多一个bash子进程
编写一个不会退出的PHP脚本并运行,使用pstree命令查看信息
|
|
######## 查看bash的创建及运行
可以使用strace追踪sshd服务的进程号,使用 -p参数,然后创建新的ssh连接到服务器,可以观察到sshd服务创建的bash进程过程及在终端输入命令与shell交互的解析过程
可以看到连接到新的shell终端时,首先会使用 clone 函数克隆一个进程出来,并且执行 使用execve函数执行了 /bin/bash ,使用此函数会执行一个二进制ELF文件或者解释器脚本,并且会带上之前记录的命令行参数和环境变量表,这些就是克隆出来的新进程,会被新的执行程序覆盖,之后再此终端再进行的操作都是由当前bash再克隆出来的子进程在运行,同样是使用clone函数和execve, 如 ls命令,会先clone ,然后 execve('/usr/bin/ls’,…)
前台作业丢到后台运行
- ctrl+z 改命令会使任务被挂起,需要使用 bg %任务号使任务在后台继续运行
- 命令最后使用 & 符号
命令会放入都后台队列中运行,可以使用jobs命令查看
对于Ctrl+z后台任务列表中的任务,我们可以使用fg转为前台,只有一个时可以省略任务号