课程简介

本课程内容涵盖了 Linux 下 ELF 文件、进程、进程控制原语、进程调度算法、中断信号系统、Linux bash 进程与终端、进程、特权进程、守护进程、会话、进程间通信、UNIX域进程间通信、进程间同步、进程池等知识技术点。

课程测试环境

  • ubuntu 20.04

  • php 7.x

  • VScode

课程需要有哪些基础知识

  1. PHP使用1年以上
  2. 能独立编译安装PHP和相关扩展
  3. 对Linux基础命令有所了解
  4. 不浮躁有足够的耐心学习知识
  5. 会使用翻译工具,爱百度google的同学^_^

大其心,容天下之物;虚其心,受天下之善;平其心,论天下之事;潜其心,观天下之理;定其心,应天下之变。

——— 呻吟语·卷二·乐集·修身

如今新兴语言层出不穷,我还有必要学PHP?

本套课程集中于 Linux 下多进程编程知识,虽然使用 PHP 来演示讲课,但在讲解中,会涉及到内核系统调用函数的说明,因为Linux内核系统调用对于所有的编程语言都是通用的。也就是说大家换一门其它编程语言,在本套课程所学到的知识都能完全应用到其它语言中,除非大家换了Linux操作系统,或是Linux操作系统的实现不使用C语言了。这也是本套课程的目标。让大家掌握方法以便能深入的研究 Linux 的 API(C 语言定义好的接口函数)。

go,python,nodejs,java,php rust,…

不论应用使用何种编程语言,底层的系统调用函数完全一致。

例如 PHP 的 pcntl_fork 底层调用的系统函数:fork,clone

系统调用

课程适合哪些人?

以下列出几点小问题如果您感兴趣,则本套课程将非常适合您!

  1. PHP 解释器是什么类型的文件?我怎么查看它?为什么我在终端执行 php index.php 它就执行了?从哪里开始执行的?到哪儿结束呢?

    elf 文件;

    通过 file /usr/bin/php 查看;

    /www/server/php/80/bin/php: ELF 64-bit LSB shared object, x86-64, version 1 (GNU/Linux), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=5e0ab6a4e4cdb7a1da44a13c30661ecc8d7af995, for GNU/Linux 3.2.0, with debug_info, not stripped
    
  2. 我通过终端如 ssh 等连接我的阿里云 Linux centos8 时,系统做了什么?我在它的终端下输入 php index.php 或是其它命令时它干啥了?

  3. 为什么我在 index.php 文件中打印 $argv 参数时能打印出东西?

  4. 如果我启动 php index.php 之后,我退出终端时它是不是退出了?为什么?如果不想让它退出怎么办呢?为什么?

    退出了;

    父进程结束,子进程也结束了;

    守护进程,后台运行。

  5. 僵尸进程是怎么产生的?对系统会有什么影响呢?我要怎么处理掉呢?我又如何查看呢?还有孤儿进程又是怎么产生的呢?它的父亲又是谁呢?

  6. 我启动 php index.php 之后,它的内存数据在哪里我可以查看呢?为什么要查看呢?

  7. 我启动 php index.php 之后,它调用系统哪些函数呢?我怎么查看呢?查到之后,我又如何知道这些系统函数是做什么的呢?其它编程语言如 Java,go 运行之后我又如何查看它内部调用哪些系统函数了呢?和 PHP 又有啥关系呢?

  8. 什么是控制终端,终端是干嘛的呢?跟我启动的 php index.php 进程有关系???还很大???

  9. 我启动多个进程以后,它们是啥关系呢?我要怎么控制每个进程呢?

  10. 程序启动之后,它的内存代码和数据段我在创建新进程的时候它是怎么复制的呢?为啥要复制呢?

  11. 我编写 Java 一个小程序,然后我 javac xxx 或是 go run xxx 它就运行了和 php index.php 一样吗【内部调用】???

    一样

  12. 如果我想自己写一套多进程的服务器小项目,要运用到哪些知识点呢? socket?tcp/ip?第一关多进程,实现跨进程间任务投递我要怎么实现呢?客户请求过来后,我要立马处理吗?我想自己动手搞一套网络通信框架要不要先搞清楚以上的问题呢?

  13. 我换语言了学完还能有用???

    么问题。

以上仅是本套课程的一部分问题哦。