3-4进程调度

pcntl_fork 创建了一个子进程,这个时候就会存在父进程和子进程,cpu先调度哪个进程? pcntl 封装了可以控制进程优先级的函数 pcntl_setpriority(setpriority),修改任意进程的优先级,pcntl_getpriority(getpriority)获取任意进程的优先级。 进程的观察命令:top top - 23:28:59 up 13:13, 1 user, load average: 0.30, 1.20, 1.61 任务: 386 total, 1 running, 385 sleeping, 0 stopped, 0 zombie %Cpu(s): 2.8 us, 1.7 sy, 0.1 ni, 95.3 id, 0.0 wa, 0.0 hi, 0.2 si, 0.0 st MiB Mem : 5855.6 total, 664.6 free, 3875.4 used, 1315.7 buff/cache MiB Swap: 976.0 total, 364.7 free, 611.3 used. 1379.6 avail Mem 进程号 USER PR NI VIRT RES SHR %CPU %MEM TIME+ COMMAND 7305 wanger 20 0 4956504 454380 52432 S 4....

2022-03-05 22:20:09 · 王二

3-3进程exec

pcntl_exec 函数用来执行一个程序,它内部的系统调用是 execve 一般的用法是父进程先创建一个子进程,然后子进程调用这个函数,正文段(代码段)+ 数据段会被新程序替换,它的一些属性会继承父进程,PID并没有发生变化。 execve() executes the program referred to by pathname. This causes the program that is currently being run by the calling process to be replaced with a new program, with newly initialized stack, heap, and (initialized and uninitialized) data segments. pathname must be either a binary executable, or a script starting with a line of the form: #!interpreter [optional-arg] ——execve 示例: demo7.php <?php function showID($str) { $pid = posix_getpid(); fprintf( STDOUT, "%s pid=%d,ppid=%d,gpid=%d,sid=%d,uid=%d,gid=%d\n", $str, $pid, posix_getppid(), posix_getpgrp(), posix_getsid($pid), posix_getuid(), posix_getgid() ); } showID("parent:"); $pid = pcntl_fork(); if (0 == $pid) { pcntl_exec('/usr/bin/php', ['demo2....

2022-03-05 12:18:18 · 王二

3-2进程退出和回收

进程的退出 PHP 进程退出的几种情况 运行到最后一行语句 运行时遇到 return 运行时遇到 exit() 函数的时候 程序异常的时候 进程接收到中断信号 正常结束、异常结束(跟信号有关),不管以何种方式退出,都有一个终止状态码。 僵尸进程 僵尸进程(zombie process):指子进程已结束,但是父进程还没有使用 wait(pcntl_wait)/pcntl_waitpid(waitpid) 来回收。 进程结束时并不会真的退出,还会驻留在内存中,父进程需要通过 wait 「pcntl_wait」函数来获取进程的终止状态码,同时该函数会释放终止进程的内存空间。否则容易造成僵尸进程过多,占用大量内存空间。 wait 函数挂起当前进程的执行直到一个子进程退出或接收到一个信号要求中断当前进程或调用一个信号处理函数。如果一个子进程在调用此函数时已经退出(俗称僵尸进程),此函数立刻返回。子进程使用的所有系统资源将被释放。关于 wait 在您系统上工作的详细规范请查看您系统的 wait(2)手册。 ——pcntl_wait 示例: <?php $pid = pcntl_fork(); if (0 === $pid) { fprintf(STDOUT, "我是子进程,pid = %d,运行完我就没事啦。\n", posix_getpid()); } else { fprintf(STDOUT, "我是父进程,pid = %d。\n", posix_getpid()); sleep(1); while (1) { # code... ; } } 运行结果: php demo5.php 我是父进程,pid = 1282。 我是子进程,pid = 1283,运行完我就没事啦。 进程状态: laradock@3a6c2da5a07b:/var/www$ ps exj PPID PID PGID SID TTY TPGID STAT UID TIME COMMAND 807 1282 1282 807 pts/2 1282 R+ 1000 0:15 php demo5....

2022-03-04 15:58:53 · 王二

3-1进程标识与fork

进程标识 一个程序被加载到内存中运行,系统会为这个进程分配相应的标识信息,比如 pid,ppid,uid,euid,pgid,sid,gid,egid… 进程查看命令 pstree 可看出进程间的关系 父子,兄弟; ps -exj ps -aux ps … PID PPID PGID UID TTY STAT TIME COMMAND laradock@3a6c2da5a07b:/var/www$ ps exj PPID PID PGID SID TTY TPGID STAT UID TIME COMMAND 0 24 24 24 pts/1 495 Ss 1000 0:00 bash PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/home/larado 24 495 495 24 pts/1 495 R+ 1000 13:37 php demo4.php LC_ALL=en_US.UTF-8 NVM_DIR=/home/laradock/.nvm LS_COLORS=no=00:fi=00: 0 496 496 496 pts/2 1051 Ss 1000 0:00 bash PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/home/larado 496 1051 1051 496 pts/2 1051 R+ 1000 0:00 ps exj LC_ALL=en_US....

2022-02-28 17:02:33 · 王二

2-3解释器文件

解释器文件 解释器文件,是一种文本文件,例如 PHP 写的解释器文件 demo.php。 #!/usr/bin/php <?php echo 'Hello World!' chmod u+x demo.php 赋予可执行权限,即可直接以 ./demo.php 执行。 解释器,是可执行文件 ELF,例如 /usr/bin/php。 bash 进程启动过程 bash 进程是如何创建的? 直接在 centos、ubuntu等终端直接登录,由 login 服务开启 bash 进程。 通过网络方式登录到 shell 终端,由 sshd 服务开启 bash 进程。 sshd 服务默认监听 22 端口。 进程观察的几个命令: pstree 查看 Linux 进程间的关系,显示进程树。 pstree -ap: ├─sshd,9408 │ └─sshd,444836 │ └─bash,444875 │ └─pstree,444893 -ap ctrl+c 产生一个中断信号,退出当前终端正在执行的进程。 ctrl+z 把当前台进程丢到后台去暂停。 strace,跟踪系统调用和信号。 通过 strace -f -s 65500 -p 9408 -o ssh.log 追踪 pid = 9408 的 sshd 进程的系统调用,来分析 bash 进程是如何创建的。...

2022-02-18 20:41:06 · 王二

2-2命令行参数与环境参数表

命令行参数 php 两种请求方式: 浏览器请求过程: http://127.0.0.1/demo2.php 浏览器访问 —> tcp 协议请求 —> Apache/Nginx[集成环境]web服务器 —> php-fpm 服务 cli 请求: php demo2.php a b c d cli 是直接在终端调用 php 解释器。 其中 [a,b,c,d] 就叫命令行参数。 环境参数表 当前 bash 进程调用 execve 函数传递进来的参数。 print_r(getenv());

2022-02-17 20:19:26 · 王二

2-1程序与进程

什么是程序? ELF 概念 程序(Program) 一般是指可执行文件,在Linux系统中它按 ELF 格式进行存储,并没有后缀可标识其文件类型,需要通过 file 命令来查看 ELF 文件的具体类型。 ELF 全称是 Executable Linkable Format (可执行与可链接格式),在计算机科学中,是一种用于二进制文件、可执行文件、目标代码、共享库和核心转储格式文件。是UNIX系统实验室(USL)作为应用程序二进制接口(Application Binary Interface,ABI)而开发和发布的,也是Linux的主要可执行文件格式。 ELF文件种类: EXEC 可执行文件 object code 目标代码文件 shared libraries 共享库文件 REL 可重定位文件 在Linux中为 xx.o xx.a,也称为静态库文件,其中 xx.o 称为目标文件,可被链接器链接成为可执行文件,静态库文件,动态库文件。 示例:php扩展中常用的动态库文件如curl,网络框架库如event.so socket扩展库sockets.so c/c++项目程序员一般引用第三方的库函数都是使用第三方编译好的动态库或是静态库文件 .so, .a。 core dump 核心转储文件 存储进程产生的异常信息。是操作系统在进程收到某些信号而终止运行时,将此时进程地址空间的内容以及有关进程状态的其他信息写入一个磁盘文件。这种信息往往用于调试。 ELF 文件格式 ELF 文件信息是以 section 或 segment 来存储的。 每个 ELF 文件都由一个 ELF 首部和紧跟其后的文件数据部分组成。数据部分可以包含: 程序头表(Program header table):描述 0 个或多个内存段信息 分段头表(Section header table):描述 0 段或多段链接与重定位需要的数据 程序头表与分段头表引用的数据,比如 .text .data...

2022-02-16 20:46:08 · 王二

1-1课程介绍

课程简介 本课程内容涵盖了 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....

2022-02-15 21:30:12 · 王二

终极复盘

从这本《财富思维觉醒》书中得到的收获或启发都有哪些?(如果竟然没有任何明 显的收获或启发,你认为原因是什么?) 思维在这之前也被启发过很多次了,道理都懂,就是过不好这一生。究其原因,就是纸上谈兵,从来迈不出“行”的那一步。 做好做坏,先行动起来。 对比之前,自己的思维认知上都发生了哪些变化?已经在生活、工作中做出改变的地方有哪些?(如果竟然没有做出任何改变,你认为阻碍你落地行动的最大原因是什么?) 最大的原因可能是这几年创业一直没挣到钱,负债越来越多,疲于奔命。 请根据对本书内容的所思所想、结合自己目前的生活工作状态,为自己制定一份切 实可行的「财富人生」的落地方案吧,这也是你接下里要做出调整、改变、积累、一步步向前不断推进的路书。 找一份稳定的工作,先有收入再说,尽快解决负债。 业余时间学习财富知识、提升专业技能,开发一些能躺着赚钱的副产品。 如果这本书“化身成一个人”站在你的面前,现在你最想对他说些什么? 大佬,带带我。 目前你还有哪些需求——需要被支持、被满足? 怎么能快速解决个人债务问题? 你内心还有其他想说的话吗?什么都可以说~ 不知道想说啥。 课程的终点,财富的起点。 “学”完了,该“习”了。 务必做到: 静下心来,没事的时候就琢磨之前学过的内容。然后要求自己去落地做出来,直到自己平日里的想法和做法,都是符合“富人之心”的。 要把自己训练成一个“对很多人都有可利用价值”的人; 并且有着至少一个可以持续很多年都被人需要、被人喜欢、被人支持和能够重复购买的商品; 直到最终为自己打造出一个自动赚钱机器,成为那个拥有“真正财产”的人。 所谓“法无定法”,只有我们有了好的“心法”,技法才能得以有效施展。犹如电视剧《天 道》(哈哈,我竟然看过电视剧原著《遥远的救世主》)中有说:有道无术、术尚可求。有术无道、止于术。 课程原文下载链接:白手起家-财富思维觉醒-2021版.pdf

2022-02-14 22:23:36 · 王二

第八章 传承篇

财富积累的心法————开源节流。 “节流”是我们当下就可以做的,而“开源”则是后边通过努力才能做到的。 8.1 开源节流 “节流” 要重视节约金钱“能源”、减少铺张浪费。 节流其实在上节课已经聊了不少,只要“尽量清心寡欲”就可以了,把每月结余下来的钱 用于让自己增值、让钱生钱。 钱是我们用生命时间换来的。 金钱是我们拥有的一种可以用来创造更多价值的能量,并且是可以24小时不休息的替我们赚钱。 钱要么用来消费,要么用来投资。 在 创富成功之前,如果可以的话、你必须尽可能的把挣到的钱用作投资,而不是消费。 不管是投资自己的才能提升、还是投资能挣钱的项目,都是正确的用法。 特别注意:还没有学习掌握投资知识之前,建议更多的投资自己的能力提升上,让自己先变 得值钱。 只有这样使用金钱能量,才对得起我们对应付出的生命时间。 “开源” 想方设法增多金钱能量流到我们这里。 这样,我们在“减去必要的”生活消费后,才能有所结余、才能开始积累财产。 除了提升自己的才能、进而影响到更多的人、因此增加主动收入以外。我们还要重视通过股票投资的方式用钱生钱——这也是这个时代最适合我们普通人增加被动收入的方法。 8.2 股权投资 好处 为什么说买股票进行股权投资,是我们普通人最好的投资机会呢? 这是因为在中国有几千万家实名注册的公司,其中只有4000多家做到了成功上市。 这说明了这4000家上市公司是杀出重围的佼佼者、是胜利者、是中国几千万家公司里的超级精英班子。 不夸张的说,中国最好的商业模式、最挣钱的公司,差不多都在这了。 而且,由于上市公司股票交易的出现,我们手里结余的钱,现在竟然可以借鸡生蛋、用钱生钱了。 简而言之: 购买持有了优秀上市公司的股份,就等于是让中国最厉害的精英人才替我们经营公司、为我们效力。而我们躺着啥都不干、就可以坐享其成。 股票投资的底牌是——买股票就是买公司、做股东、分利润。 可以在4000多家上市公司里优中选优,只做各个行业中的优质企业、龙头企业的股东。 其他好处: 可以把我们的时间解放出来,从靠主动工作收入、变成投资产生的被动收入,因此有了更多时间做自己喜欢的事。 可以快速转移资金,从一个经营开始转下的公司、快速转移到另一家经营向上的公司。 可以通过资产的合理配置,不仅能有效降低资金的安全、更能使得投资收益稳定的持续增长。 股票投资——不仅是达到金钱自由的必经之路,更是富人们管理资产的重要方式、财富传承最好的载体。 不夸张的说,如果股票投资存在,那么这将是一个“永生行业”。 而对我们唯一的要求就是:学习看懂一家公司即可。(虽然不容易,但也没那么难) 靠谱吗? 你现在是不是心里面在犯嘀咕呢?有着不少的疑惑?感觉买股票不就是炒股吗?周围的人都在赔钱啊,这玩意真的靠谱吗? 在股市挣不到钱的,绝大多数都是“没搞清楚股票是什么”的人;是没有正儿八经学习过正统投资知识的人、更是没有经得住贪婪诱惑的人;入场买股票带的是“赌博的心”,那结果必然是“赔钱的相”了。 如果一个人完全不知道自己究竟在买什么?为什么要买的时候,而轻易下注、下重注,就是赌博。 投资是一门手艺,是需要懂的投资之道、以及长期学习和实践才能掌握的赚钱技术。 只要我们坚定走投资正道,不投机倒把瞎买瞎卖,赔钱其实也挺不容易的,长期来看只不过是赚多赚少的区别而已。 8.3 神奇的复利 表格的第一列是投资的时长,第一行是投资年复合收益率(“利滚利”模式)。 5% 是银行理财产品的收益率,15% 是我们普通人稍加学习就有机会达到的收益率, 26% 是专业投资者的收益率(只要我们方法对也是有机会达到了)。 第1组数据:单笔投资 如果投资水平能达到年化复合收益率是 26% 的话,10年后本金将会翻10倍。 如果我们只是把钱买成 5% 收益率的银行理财产品,投资20年的收益率为2.65倍。 对于专业投资者来说只需要4年就达到了。即使收益率只有15%,也可以提前13年达到。 这也说明了一个事实——投资能力越强,资金翻倍速度越快。 第2组数据:定期追加 在第一组数据基础上,每年增加一个单位的投资金额,比如说第一年投资了10000元, 第二年、第三年……每年都增投10000元,数据就会变成这个样子。 同样是 26% 的年化收益率,第一组数据需要10年才能达到10倍、而在第二组数据里第 5年就达到了10倍,等于缩短了5年时间。...

2022-02-12 08:51:52 · 王二