标签:一个 ctrl 需要 并发编程 cto term 是你 .com 图片
有人的地方,就有江湖
Linux进程也不例外
有进程的地方,也有江湖
按照武侠小说的套路:一个高手一旦决定金盆洗手、隐退江湖,下场往往会很惨,甚至引发整个武林动荡。比如衡山派的刘正风,早已厌倦了江湖,打算去当一个音乐家,于是整了个金盆洗手大会,结果被嵩山派搞得家破人亡。再比如飞虎镖局老板吕腾空,在金盆洗手大会现场,又稀里糊涂地接了一个大单,天魔琴重现江湖,再次把江湖整得血雨腥风。人在江湖漂,哪能不挨刀,出来混,总是要还的。吃干了,抹净了,想做甩手掌柜脱身很难,正所谓:一入江湖深似海,从此便是局中人。
不仅仅在武侠世界中,在整个社会历史长河中,每个人也基本上被历史进程裹胁、随之沉浮,能做到完美脱身的很少很少。比如胡雪岩、沈万三,比如《大明王朝》中的商人沈一石,再比如《无间道》中的阿仁,活脱脱一个现实版余罪:
“三年后又三年,都快10年了,老大”
“今天是你生日啊,臭小子!”
在一个没有优雅退出机制的游戏中,既想搏一把,又想完美脱身,是需要极高的智慧和执行力的:既要抵制住不赚最后一个铜板的诱惑,又要在战略执行时果敢迅速,绝不拖泥带水。然而,大部分人却没有这个运气和智慧,总觉得自己能控制所有事情,总想干完这一票就金盆洗手,结果把自己所有的一切、甚至性命都搭了进去。为了所想起了执念,人们就容易变得不理性起来,人性的各种弱点开始暴漏,开始容易陷入各种纷争、争夺,比如权力、财富、地位。
不仅人类,进程也是如此,一个计算机系统中的所有进程基本上都在为抢占CPU的控制权、为了能跟终端搭上讪、为了能在前台运行而乐此不疲。
在Linux的shell环境下敲入top命令,就可以看到整个Linux系统中的所有进程运行情况:
比如我的Ubuntu环境,大家可以很清楚地看到:当前系统一共有195个进程,其中1个在running运行中,其余的194个在睡眠中。除此之外,我们还可以看到内存、CPU的使用率,以及进程的运行状态等。如果我们想看这些进程之间的关系,可以在shell环境下敲入pstree命令:
通过pstree命令我们可以查看整个进程树以及各个进程之间的关系:父进程、子进程、首进程、控制进程……,如果我们继续对进程进行分析,就会发现:每个进程并不是孤立存在的,大多数时候,它们跟其它进程通过各种机制一起协同工作、完成某项工作的。一起协同工作的这些进程就构成了一个进程组,有点类似于武侠小说中的各种组合,比如江南奇怪、天罡北斗阵、罗汉阵、玄冥二老、桃谷六仙等。那它们是如何协作工作的呢?很简单,每个进程要都有自己的角色和定位:父进程、子进程、控制进程、首进程、前台进程、后台进程、守护进程、孤儿进程、僵尸进程……,除了进程机制、还有进程间通信、OS 的调度策略等,正如人类一样:有人的地方,就有江湖,有进程的地方,也有江湖。
人在江湖飘,哪能不挨刀?如果一个进程想金盆洗手,终止运行,会不会引起整个Linux江湖发生混乱?答案是不会。因为Linux系统有各种完善的退出机制、托管机制,清理机制。一个进程如果想终止运行,直接调用exit就可以了,就可以优雅地脱离pstree下的进程树,而基本上不会影响整个Linux其它进程的稳定运行。
从本期课程开始,将正式进入多任务并发编程的学习。本期课程的主要内容:如何通过Linux的系统调用接口fork/exec/wait/exit去创建、控制和运行一个进程;进程与终端的关系是怎样的?为什么我们可以使用shell/SSH/xshell/putty/串口等环境运行我们的程序并且可以把运行结果打印到这些软件的界面上?为什么我们可以使用ctrl+C去终止一个进程的执行?各个进程之间是如何相互协作工作的?什么是前台进程?后台进程?守护进程?孤儿进程?僵尸进程?这些都是本期课程的学习重点。
课程视频学习主页:https://edu.51cto.com/sd/6e080
标签:一个 ctrl 需要 并发编程 cto term 是你 .com 图片
原文地址:https://blog.51cto.com/zhaixue/2365666