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

相关推荐
LongRunning6 小时前
【Linux】RK3568-OpenCV+YOLO(八)
linux·opencv·yolo
Zwawa9 小时前
屏幕不止一种:OLED、LCD1602字符屏、TFT/IPS图形屏和串口屏怎么用,这与TTY和PTY又有什么关系
c语言·单片机·嵌入式
民乐团扒谱机9 小时前
【微实验】NSGA-II(非支配排序遗传算法)——解决多目标优化问题的“自然选择模拟器”
linux·人工智能·算法
물の韜10 小时前
ZYNQ/FMQL系列Linux之I2C开发实战
linux·arm开发·嵌入式硬件·设备树·iic·zynq
qq_3718021110 小时前
Ubuntu Linux中安装WorkBuddy
linux·运维·服务器·ubuntu
无足鸟ICT10 小时前
【RHCA+】iptraf-ng(网络监控分析)
linux·网络
独隅10 小时前
WebStorm 在 Linux 环境下的实战安装与高效开发指南
linux·ide·webstorm
坤坤子吖12 小时前
Linux网络编程:TCP服务器的多进程与多线程实现
linux·服务器·开发语言·网络·c++·笔记·学习
阡陌数智12 小时前
Claude API新版本重大变更与安全升级指南
java·linux·安全
奶茶树12 小时前
【Linux】环境开发工具(vim,gcc,g++,Makefile)
linux·运维·vim