Linux 下“Hello World”的幕后发生了什么
Linux
今日IT小知识分享:Linux及下“Hello的内容,接下来IT袋网小编为大家介绍。
今天我在想 —— 当你在 Linux 上运行一个简单的 “Hello World” Python 程序时,发生了什么,就像下面这个?
print("hello world")
这就是在命令行下的情况:
$ python3 hello.py
hello world
但是在幕后,实际上有更多的事情在发生。我将描述一些发生的情况,并且(更重要的是)解释一些你可以用来查看幕后情况的工具。我们将用readelf、strace、ldd、debugfs、/proc、ltrace、dd和stat。我不会讨论任何只针对 Python 的部分 —— 只研究一下当你运行任何动态链接的可执行文件时发生的事情。
0、在执行 execve 之前
要启动 Python 解释器,很多步骤都需要先行完成。那么,我们究竟在运行哪一个可执行文件呢?它在何处呢?
1、解析 python3 hello.py
Shell 将python3 hello.py解析成一条命令和一组参数:python3和['hello.py']。
在此过程中,可能会进行一些如全局扩展等操作。举例来说,如果你执行python3 *.py,Shell 会将其扩展到python3 hello.py。
2、确认 python3 的完整路径
现在,我们了解到需要执行python3。但是,这个二进制文件的完整路径是什么呢?解决办法是使用一个名为PATH的特殊环境变量。
自行验证:在你的 Shell 中执行echo $PATH。对我来说,它的输出如下:
$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
当执行一个命令时,Shell 将会依序在PATH列表中的每个目录里搜索匹配的文件。
对于fish(我的 Shell),你可以在这里查看路径解析的逻辑。它使用stat系统调用去检验是否存在文件。
自行验证:执行strace -e stat bash,然后运行像python3这样的命令。你应该会看到如下输出:
stat("/usr/local/sbin/python3", 0x7ffcdd871f40) = -1 ENOENT (No such file or directory)
stat("/usr/local/bin/python3", 0x7ffcdd871f40) = -1 ENOENT (No such file or directory)
stat("/usr/sbin/python3", 0x7ffcdd871f40) = -1 ENOENT (No such file or directory)
stat("/usr/bin/python3", {st_mode=S_IFREG|0755, st_size=5479736, ...}) = 0
你可以观察到,一旦在/usr/bin/python3找到了二进制文件,搜索就会立即终止:它不会继续去/sbin或/bin
相关阅读
-
win11字体安装位置详细介绍 windows11字体怎么安装
为网友们详解win11字体安装位置详细介绍方面的知识,关于win11字体安装位置详细介绍 windows11字体怎么安装,下面为详细的介绍。 有一些小伙伴在安装win11字体后,找不到自己的字体安装在哪里
-
win10开机进不了系统怎么办 重装系统不停重启教程
小编为大家说一说win10开机进不了系统怎么办和重装系统不停重启教程的介绍,接下来小编为网友介绍。 在日常使用电脑的过程中,我们有时候会遇到电脑开机后进不了系统的情况,这是令人
-
游戏分辨率怎么调 英雄联盟游戏分辨率怎么调
本文导读:游戏分辨率怎么调的方法内容,关于游戏分辨率怎么调 英雄联盟游戏分辨率怎么调,接下来一起来看看吧。 最近不少的IT袋用户问分辨率是不是越高越好,其实不然,分辨率高并不
-
win10怎么设置屏幕不休眠 win10怎么关闭屏幕不休眠
今天介绍win10怎么设置屏幕不休眠的相关知识,win10设置屏幕不休眠共三步,只需在电脑睡眠设置中进行操作即可。具体步骤如下:


