Linux 下“Hello World”的幕后发生了什么(3)
Linux
好极了!我们找到了 inode!你可以在里面看到python3,这是一个很好的迹象。我们并不打算深入了解所有这些,但是Linux 内核的 ext4 inode 结构指出,前 16 位是 “模式”,即权限。所以现在我们将看一下ffa1如何对应到文件权限。
-
ffa1对应的数字是0xa1ff,或者 41471(因为 x86 是小端表示) -
41471 用八进制表示就是
0120777 -
这有些奇怪 – 那个文件的权限肯定可以是
777,但前三位是什么呢?我以前没见过这些!你可以在inode 手册页中找到012的含义(向下滚动到“文件类型和模式”)。这里有一个小的表格说012表示 “符号链接”。
我们查看一下这个文件,确实是一个权限为777的符号链接:
$ ls -l /usr/bin/python3
lrwxrwxrwx 1 root root 9 Apr 5 2021 /usr/bin/python3 -> python3.9
它确实是!耶,我们正确地解码了它。
4、准备复刻
我们尚未准备好启动python3。首先,Shell 需要创建一个新的子进程来进行运行。在 Unix 上,新的进程启动的方式有些特殊 – 首先进程克隆自己,然后运行execve,这会将克隆的进程替换为新的进程。
自行验证:运行strace -e clone bash,然后运行python3。你应该会看到类似下面的输出:
clone(child_stack=NULL, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7f03788f1a10) = 3708100
3708100是新进程的 PID,这是 Shell 进程的子进程。
这里有些工具可以查看进程的相关信息:
-
pstree会展示你的系统中所有进程的树状图 -
cat /proc/PID/stat会显示一些关于该进程的信息。你可以在man proc中找到这个文件的内容说明。例如,第四个字段是父进程的PID。
新进程的继承
新的进程(即将变为python3的)从 Shell 中继承了很多内容。例如,它继承了:
-
环境变量:你可以通过
cat /proc/PID/environ | tr '' 'n'查看 -
标准输出和标准错误的文件描述符:通过
ls -l /proc/PID/fd查看 - 工作目录(也就是当前目录)
- 命名空间和控制组(如果它在一个容器内)
- 运行它的用户以及群组
- 还有可能是我此刻未能列举出来的更多东西
5、Shell 调用 execve
现在我们准备好启动 Python 解释器了!
相关阅读
-
win11字体安装位置详细介绍 windows11字体怎么安装
为网友们详解win11字体安装位置详细介绍方面的知识,关于win11字体安装位置详细介绍 windows11字体怎么安装,下面为详细的介绍。 有一些小伙伴在安装win11字体后,找不到自己的字体安装在哪里
-
win10开机进不了系统怎么办 重装系统不停重启教程
小编为大家说一说win10开机进不了系统怎么办和重装系统不停重启教程的介绍,接下来小编为网友介绍。 在日常使用电脑的过程中,我们有时候会遇到电脑开机后进不了系统的情况,这是令人
-
游戏分辨率怎么调 英雄联盟游戏分辨率怎么调
本文导读:游戏分辨率怎么调的方法内容,关于游戏分辨率怎么调 英雄联盟游戏分辨率怎么调,接下来一起来看看吧。 最近不少的IT袋用户问分辨率是不是越高越好,其实不然,分辨率高并不
-
win10怎么设置屏幕不休眠 win10怎么关闭屏幕不休眠
今天介绍win10怎么设置屏幕不休眠的相关知识,win10设置屏幕不休眠共三步,只需在电脑睡眠设置中进行操作即可。具体步骤如下:


