从键盘输入 ./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

相关推荐
A小辣椒20 小时前
TShark:Wireshark CLI 功能
linux
A小辣椒1 天前
TShark:基础知识
linux
AlfredZhao1 天前
OCI 明明分配了 200G 系统盘,为什么 df 只看到 30G?
linux·oci
AlfredZhao2 天前
vi 删除指定范围的行,不用再反复按 dd
linux·vi
用户9718356334662 天前
银河麒麟 KY10 申威(SW64) 安装 nginx-1.16.1-2.p01.ky10.sw_64.rpm 详细步骤
linux
猪脚踏浪2 天前
linux 拷贝文件或目录到指定的位置
linux
摇滚侠3 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
bush43 天前
嵌入式linux学习记录十四、术语
linux·嵌入式
载数而行5203 天前
Linux 11 动态监控指令top
linux
不会C语言的男孩3 天前
Linux 系统编程 · 第 8 章:进程基础
linux·c语言