课程简介
本课程内容涵盖了 Linux 下 ELF 文件、进程、进程控制原语、进程调度算法、中断信号系统、Linux bash 进程与终端、进程、特权进程、守护进程、会话、进程间通信、UNIX域进程间通信、进程间同步、进程池等知识技术点。
课程测试环境
-
ubuntu 20.04
-
php 7.x
-
VScode
课程需要有哪些基础知识
- PHP使用1年以上
- 能独立编译安装PHP和相关扩展
- 对Linux基础命令有所了解
- 不浮躁有足够的耐心学习知识
- 会使用翻译工具,爱百度google的同学^_^
大其心,容天下之物;虚其心,受天下之善;平其心,论天下之事;潜其心,观天下之理;定其心,应天下之变。
——— 《呻吟语·卷二·乐集·修身》
如今新兴语言层出不穷,我还有必要学PHP?
本套课程集中于 Linux 下多进程编程知识,虽然使用 PHP 来演示讲课,但在讲解中,会涉及到内核系统调用函数的说明,因为Linux内核系统调用对于所有的编程语言都是通用的。也就是说大家换一门其它编程语言,在本套课程所学到的知识都能完全应用到其它语言中,除非大家换了Linux操作系统,或是Linux操作系统的实现不使用C语言了。这也是本套课程的目标。让大家掌握方法以便能深入的研究 Linux 的 API(C 语言定义好的接口函数)。
go,python,nodejs,java,php rust,…
不论应用使用何种编程语言,底层的系统调用函数完全一致。
例如 PHP 的 pcntl_fork 底层调用的系统函数:fork,clone
课程适合哪些人?
以下列出几点小问题如果您感兴趣,则本套课程将非常适合您!
-
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
-
我通过终端如 ssh 等连接我的阿里云 Linux centos8 时,系统做了什么?我在它的终端下输入
php index.php
或是其它命令时它干啥了? -
为什么我在
index.php
文件中打印$argv
参数时能打印出东西? -
如果我启动
php index.php
之后,我退出终端时它是不是退出了?为什么?如果不想让它退出怎么办呢?为什么?退出了;
父进程结束,子进程也结束了;
守护进程,后台运行。
-
僵尸进程是怎么产生的?对系统会有什么影响呢?我要怎么处理掉呢?我又如何查看呢?还有孤儿进程又是怎么产生的呢?它的父亲又是谁呢?
-
我启动
php index.php
之后,它的内存数据在哪里我可以查看呢?为什么要查看呢? -
我启动
php index.php
之后,它调用系统哪些函数呢?我怎么查看呢?查到之后,我又如何知道这些系统函数是做什么的呢?其它编程语言如 Java,go 运行之后我又如何查看它内部调用哪些系统函数了呢?和 PHP 又有啥关系呢? -
什么是控制终端,终端是干嘛的呢?跟我启动的
php index.php
进程有关系???还很大??? -
我启动多个进程以后,它们是啥关系呢?我要怎么控制每个进程呢?
-
程序启动之后,它的内存代码和数据段我在创建新进程的时候它是怎么复制的呢?为啥要复制呢?
-
我编写 Java 一个小程序,然后我
javac xxx
或是go run xxx
它就运行了和php index.php
一样吗【内部调用】???一样
-
如果我想自己写一套多进程的服务器小项目,要运用到哪些知识点呢? socket?tcp/ip?第一关多进程,实现跨进程间任务投递我要怎么实现呢?客户请求过来后,我要立马处理吗?我想自己动手搞一套网络通信框架要不要先搞清楚以上的问题呢?
-
我换语言了学完还能有用???
么问题。
以上仅是本套课程的一部分问题哦。