跟濤哥一起學嵌入式 14:Linux下的進程江湖

有人的地方,就有江湖

 Linux進程也不例外 

有進程的地方,也有江湖

 

那些年,奢望金盆洗手的江湖大佬們

 

按照武俠世界的套路:一旦一個高手決定金盆洗手、隱退江湖,往往下場會很慘、甚至引發整個武林動盪。比如衡山派的劉正風,早已厭倦了江湖,打算去當一個音樂家,整了個金盆洗手大會,結果被嵩山派搞得家破人亡。再比如飛虎鏢局老闆呂騰空在金盆洗手大會現場,又稀裏糊塗接了一個大鏢,天魔琴重現江湖,再次把江湖整得血雨腥風。人在江湖漂,哪能不挨刀,出來混,總是要還的,吃乾了,抹淨了,然後做甩手掌櫃,想脫身基本上很難,正所謂:一入江湖深似海,從此便是局中人。

 

不僅僅在武俠世界中,在社會歷史長河中,每個人也基本上被歷史進程裹脅、隨之沉浮,能做到完美脫身的也很少很少。比如胡雪巖、沈萬三,比如《大明王朝》中的商人沈一石,再比如《無間道》中的陳永仁,活脫脫一個現實版的餘罪:

“三年後又三年,都快10年了,老大”

“今天是你生日啊,臭小子!”

 

在一個沒有優雅退出機制的遊戲中,既想搏一把,又想完美脫身,是需要極高的智慧和執行力的:既要抵制住不賺最後一個銅板的誘惑,又要在戰略執行時果敢迅速,絕不拖泥帶水。然而,大部分人卻沒有這個運氣和智慧,總覺得自己能控制所有事情,總想幹完這一票就金盆洗手,結果把自己所有的一切、甚至性命都搭了進去。爲了所想起了執念,人們就容易變得不理性起來,人性的各種弱點開始暴漏,開始容易陷入各種紛爭,比如權力、財富、地位。

 

不僅人類,進程也是如此,一個計算機系統中的所有進程基本上都在爲搶佔CPU的控制權、爲了能跟終端搭上訕、爲了能在前臺運行而樂此不疲。

 

進入Linux進程的江湖世界

 

在Linux的shell環境下敲入top命令,就可以看到整個Linux系統中的所有進程運行情況:

 

 

比如我的Ubuntu環境,大家可以很清楚地看到:當前系統一共有195個進程,其中1個在running運行中,其餘的194個在睡眠中。除此之外,我們還可以看到內存、CPU的使用率,以及進程的運行狀態等。如果我們想看這些進程之間的關係,可以在shell環境下敲入pstree命令:

 

通過pstree命令我們可以查看整個進程樹以及各個進程之間的關係:父進程、子進程、首進程、控制進程……,如果我們繼續對進程進行分析,就會

發現:每個進程並不是孤立存在的,大多數時候,它們跟其它進程通過各種機制一起協同工作、完成某項工作的。一起協同工作的這些進程就構成了一個進程組,有點類似於武俠小說中的各種組合,比如江南奇怪、天罡北斗陣、羅漢陣、玄冥二老、桃谷六仙等。那它們是如何協作工作的呢?很簡單,每個進程要都有自己的角色和定位:父進程、子進程、控制進程、首進程、前臺進程、後臺進程、守護進程、孤兒進程、殭屍進程……,除了進程機制、還有進程間通信、OS 的調度策略等,正如人類一樣:有人的地方,就有江湖,有進程的地方,也有江湖。

 

一個Linux進程的金盆洗手

 

人在江湖飄,哪能不挨刀?如果一個進程想金盆洗手,終止運行,會不會引起整個Linux江湖發生混亂?答案是不會。因爲Linux系統有各種完善的退出機制、託管機制,清理機制。一個進程如果想終止運行,直接調用exit就可以了,就可以優雅地脫離pstree下的進程樹,而基本上不會影響整個Linux其它進程的穩定運行。

 

《Linux系統編程》第04期:打通進程與終端的任督二脈  視頻教程發佈

 

從本期課程開始,將正式進入多任務併發編程的學習。本期課程的主要內容:如何通過Linux的系統調用接口fork/exec/wait/exit去創建、控制和運行一個進程;進程與終端的關係是怎樣的?爲什麼我們可以使用shell/SSH/xshell/putty/串口等環境運行我們的程序並且可以把運行結果打印到這些軟件的界面上?爲什麼我們可以使用ctrl+C去終止一個進程的執行?各個進程之間是如何相互協作工作的?什麼是前臺進程?後臺進程?守護進程?孤兒進程?殭屍進程?已經購買課程的學員可以

CSDN學院課程學習地址:https://edu.csdn.net/course/detail/20776

:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章