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

相关推荐
三言老师5 小时前
K8s集群运行时自动化运维全覆盖落地实操(下)
linux·运维·服务器·网络
ltl6 小时前
HAProxy HTX 与 HTTP 路径:内部表示、改写落点与协议分叉
linux
ltl6 小时前
可拆分 OS:CXL 内存池化如何动摇本地 DRAM 假设
linux
ltl6 小时前
Tetragon 强制执行:Override 与 SIGKILL 各自保证什么
linux
lengjingzju6 小时前
编译与调试完全指南—第6章 性能分析工具
linux
躺不平的理查德7 小时前
嵌入式 Linux 系统移植与 SD 卡量产镜像制作
linux·运维·服务器
一直走下去-明8 小时前
centos7无法安装tcpreplay
linux·运维
吹什么轩8 小时前
linux网络:TCP套接字基础
linux·网络·tcp/ip
时空无限9 小时前
ubuntu dpkg -l 输出第一列解释
linux·运维·ubuntu
叮咚侠11 小时前
Ubuntu 24.04 安装zabbix-agent 5.0 服务
linux·ubuntu·zabbix·zabbix-agent