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

相关推荐
网硕互联的小客服3 小时前
Linux服务器磁盘应该如何合理分区?
linux·运维·服务器
贵沫末4 小时前
Ubuntu——常用软件安装
linux·运维·ubuntu
Doraemomo5 小时前
Linux内核驱动开发——中断与定时器
linux·运维·驱动开发
2301_808414385 小时前
Linux中动静态库的理解
linux·运维·服务器
jianqiang.xue6 小时前
【CStackGUI 实战】深色主题终端:app.dark 默认深色 + 顶层命名样式表 + 运行时切换
单片机·嵌入式·cstackgui·c语言gui·可视化拖拽
M78佐菲6 小时前
ARM学习笔记(11)
linux·arm开发·笔记·嵌入式硬件·学习
M78佐菲6 小时前
ARM学习笔记(10)
linux·arm开发·笔记·嵌入式硬件·学习
半仙白桑6 小时前
内核篇第十五讲:system-V共享内存
linux·共享内存·shmget·shmat·shmdt·shmctl
一条破秋裤7 小时前
Linux 线程创建:pthread_create 与基本回收
java·linux·运维
s6516654968 小时前
IDT和GDT是什么
linux