进程控制这块缺什么补什么,别跳过
学 Linux 系统编程,很多人卡在“多线程看懂了,多进程却写不利索”。线程能共享变量,调试时打个断点还能看个全貌;可一用 fork,代码同一段跑两遍,没经验的人连 printf 打印几次都算不清。这门课只讲进程控制,不扯线程,专治那种“知道 fork 是干什么的,但一写就出段错误、文件被写乱、子进程变僵尸”的尴尬。如果你写过 C,知道文件描述符、会基本指针操作,但一碰多进程就发懵,这章就是给你补的。别假装自己都会了,进程关系、文件描述符共享、僵尸进程回收这些坑,不亲手敲一遍根本记不住。
建议先看哪几块,怎么配合资料练
资料包是视频配合代码讲解的形式,别干看,边看边开虚拟机跟着敲。建议先看进程相关 ID 获取和 fork 函数作用这两块,把“父进程拿到子进程的 PID,子进程拿到 0”这个返回值逻辑彻底弄懂,这是后面所有内容的基础。接着重点啃父子进程共享操作相同文件这块,这是最容易写错的地方:fork 后文件描述符被复制,父子进程同时写同一个文件偏移量会互相覆盖,不亲手跑一遍你根本不知道输出会乱成什么样。然后看 exec 加载器,理解它怎么把当前进程的代码段替换成新程序,但文件描述符默认不关。最后必须认真看 wait 函数两讲和僵尸进程、孤儿进程那节,这是面试必问、实战必踩的雷区。练习时自己写个小程序:父进程 fork 出子进程,子进程用 exec 换成另一个程序执行,父进程用 wait 回收,中间故意不回收制造僵尸进程,用 ps 命令观察进程状态的变化。光看视频不动手,到写真实服务端时照样抓瞎。
学完能独立做什么,能回答什么问题
学完这章,你应该能独立写一个完整的多进程程序:从 fork 创建子进程、用 exec 让子进程跑外部程序、到父进程用 wait 回收子进程,全程不产生僵尸进程。你还得能回答几个具体问题:fork 之后父子进程的全局变量是不是各有一份?为什么?父子进程同时往同一个文件写数据,怎么保证不互相覆盖?exec 执行新程序后,原来打开的文件描述符还在不在?僵尸进程是怎么产生的,危害是什么,怎么用 wait 彻底避免?孤儿进程为什么会被 init 进程收养?守护进程和后台运行进程有什么本质区别?最后两节讲进程关系和守护进程,这是从“会写小程序”到“能写后台服务”的分水岭。如果你看完不能独立写出一个守护进程的初始化代码,那就回去把 fork 和文件描述符共享那几节再敲一遍。别往下看网络编程,进程控制没吃透,后面写并发服务器全是隐患。
课程目录
1 1. 本章讲些什么 (08:01) 2 2. 有关进程 (18:23) 3 3. 获取进程相关的ID (11:20) 4 4. fork函数的作用 (19:06) 5 5. 父子进程各自执行哪些代码 (13:23) 6 6. 父子进程共享操作相同的文件 (26:23) 7 7. exec加载器 (18:34) 8 8. system函数、僵尸进程、孤儿进程 (16:55) 9 9. wait函数 1 (19:35) 10 10. wait函数2 (22:40) 11 11. 进程状态 (12:11) 12 12. java进程 (13:43) 13 13. 有关程序多进程 (17:29) 14 14. 进程关系和守护进程 (11:13)





