从键盘输入 ./aaa 到程序运行,中间发生了什么?

在终端命令行,输入 ./aaa 执行程序,就是在 shell 里执行。

Shell 是运行在终端里的命令解释器(如 bash、zsh),负责接收用户输入的命令、解析并执行。

./aaa 就是 shell 接收到的一条命令,./ 表示当前目录,shell 用它来找到 aaa 文件。

流程:

Shell(bash/zsh)

解析命令 "./aaa"

fork() 创建子进程

子进程调用 execve("./aaa", argv, envp)

execve 做了什么:进程替换, 提供环境变量 envp

内核加载 aaa 替换当前进程,进程(PID 不变)

aaa 变成当前进程,执行 aaa 程序的 main()

shell 不执行程序,shell 负责"创建进程 + 组织参数 + 提供环境变量"

PID 不变,但程序已经完全换了

shell 只做:解析命令、创建进程、调用 execve

为什么必须 fork + exec (经典设计)

Linux 设计是:

fork = 复制自己

exec = 变成别人

shell 不能直接变 aaa,否则自己就消失了

所以必须 fork 一个"副本"去执行 aaa

相关推荐
keyipatience1 小时前
13.系统调用与进程管理全解析
linux
你今天努力了吗?*—*1 小时前
4.1 Linux 日志排查
linux·运维·服务器
小狗爱吃黄桃罐头1 小时前
宋宝华:原理和实战解析Linux中如何正确地使用内存屏障
linux·内存屏障
山上三树1 小时前
操作系统如何实现各种功能
linux·运维·服务器
妹妹够啦1 小时前
PyCharm创建venv环境
linux·运维·服务器
我爱小疯喵喵2 小时前
5 Linux apt下载软件包
linux·运维·服务器
坚持就完事了2 小时前
Linux中的tr命令
linux·运维·服务器
普通young man2 小时前
谈Linux下编译和动静态链接
linux·运维·服务器
初願致夕霞2 小时前
Linux编程_应用层_HTTP与HTTPS协议
linux·c++·http·https