Linux创建进程的方式有多奇葩? | Core Dumped
合集 · Core Dumped (28)
-
为什么应用程序只能运行在特定操作系统上? | Core Dumped
13:09
-
内核到底在哪结束?一个从未被解释清楚的问题 | Core Dumped
19:36
-
为什么程序不能互相访问内存?硬件如何保护系统 | Core Dumped
14:51
-
CPU里的隐藏绝技:位运算究竟如何工作? | Core Dumped
13:04
-
编程术语的历史渊源:今天我们还在用的词从哪来? | Core Dumped
17:42
-
硬件指令如何让多线程编程不再噩梦? | Core Dumped
18:41
-
解析表达式的高效算法:Pratt Parsing详解 | Core Dumped
22:08
-
信号机制:让Ctrl+C做任何你想做的事 | Core Dumped
18:35
-
为什么Python正在移除GIL?并行编程的瓶颈即将消失 | Core Dumped
13:36
-
为何底层项目里全是这种古怪代码? | Core Dumped
18:25
-
为什么有些项目要同时使用多种编程语言? | Core Dumped
19:32
-
那次我不得不使用链表 | Core Dumped
10:17
-
底层探秘:ArrayList与LinkedList内存对决 | Core Dumped
21:20
-
80年代的竞态条件避免算法,为何失败了? | Core Dumped
19:05
-
计算机如何将字符串转换为数字?完整过程解析 | Core Dumped
12:09
-
多任务时,硬件如何辅助软件切换上下文? | Core Dumped
13:15
-
堆内存为何如此缓慢?深入剖析 | Core Dumped
17:53
-
Linux创建进程的方式有多奇葩? | Core Dumped
17:51
-
CPU的“前进”指令,竟是时钟在指挥? | Core Dumped
14:22
-
程序≠进程:别再搞混了 | Core Dumped
8:08
-
CPU是如何运行函数的?底层原理揭秘 | Core Dumped
19:49
-
内存如何记住数据?晶体管层面的原理 | Core Dumped
16:58
-
揭秘让电脑反应更丝滑的CPU调度算法 | Core Dumped
45:02
-
多核CPU的线程是如何运作的? | Core Dumped
11:27
-
电容存数据有多不靠谱?但DRAM还是这么干了 | Core Dumped
18:09
-
CPU是如何与千奇百怪的设备交互的? | Core Dumped
23:28
-
晶体管是如何执行代码的? | Core Dumped
14:28
-
为什么Windows装软件需要安装程序,而macOS不用? | Core Dumped
19:51
Description
来源:https://www.youtube.com/watch?v=SwIPOf2YAgI 原标题:The Weird Way Linux Creates Processes 频道:Core Dumped 发布时间:2026-01-20 内容简介: 当你运行一个程序时,背后到底发生了什么?本期视频带你深入对比Windows和Linux两大操作系统在创建进程时的底层机制差异。Linux的fork方式为何被称为“诡异”?它如何用看似反直觉的逻辑实现高效的进程管理?视频将揭开从系统调用到进程诞生的神秘面纱,让你直击操作系统内核的运作原理。如果你想探索更底层的系统编程世界,不妨尝试自己动手实现Redis、Git、HTTP服务器或解释器等经典项目。 关注我的Twitter:@coredumpped 加入Discord社区:https://discord.gg/szyQsXfzuv 项目赞助:https://github.com/jdvillal 业务联系:contact.coredumped@gmail.com
Comments
Unix的问题是一直没有统一的用户态服务的API,导致的最基础的一个问题就是,创建进程过程中的一部分用户态代码没地方放(就是folk 和exec之间的那部分),最后只能放在父进程中(最常见的父进程就是shell,或者安卓的桌面管理器)。Unix本质上是个内核标准加上非常少的系统API,Linux更是个纯内核,各种GNU/Linux实际上都是API不是特别兼容的独立操作系统,就连systemD这种基础的服务现在都还存在争议,所以Linux根本就缺乏在用户态形成统一API的能力。
♥ 37 ↩ 7
fork 简直是计算机历史上最愚蠢的设计,在实际业务开发中,99.9%的场景下,启动新进程都是为了“干一件别的事”,而不是“让当前的事变成两个人干”;最经典的例子就是早期的JVM,因为它是多线程的,所以fork之后几乎总是会触发COW,导致8GB内存翻倍到16GB,然后内存爆掉;可我只是想简单地调用一个ffmpeg命令啊。很多早期linux程序不得不专门设计一个很小的stub进程,专门用来执行fork,这是典型的操作系统的愚蠢设计把成本转嫁给应用开发者。
♥ 6 ↩ 5
不是为啥这样搞啊,这不是多一次复制的成本吗?
♥ 6 ↩ 7
撞车了 https://b23.tv/d6Gbs6S
♥ 6 ↩ 1
现在发现windows才奇葩[笑哭]create process远没有fork灵活多变
♥ 5 ↩ 27
那打开的文件fd怎么算?
♥ 5 ↩ 3
昨天刚学了这块内容就推送[doge]
♥ 4
都用 rust 就没这么多事了[呲牙]
♥ 3 ↩ 7
posix_spawn是?
♥ 2 ↩ 2
没记错的话貌似安卓也是这样的,毕竟安卓的底层也是linux[脱单doge]
♥ 2
记得 tsoding 说过 winapi 就像 创建窗口(宽度,高度,是否可关闭,要不要核爆我的房子)
♥ 2 ↩ 1
@会沉思的鱼 总结
♥ 1 ↩ 1
windows:创建一个新进程,然后执行特定代码 unix:我不能让用户态创建新进程,所以我要先复制,复制完了观察一下我是谁,发现我是子进程,哇哦!直~接切换