1. 程式人生 > >Linux下的進程江湖

Linux下的進程江湖

dcb mar proc 學習 ESS 程序 計算機系統 之間 ubunt

有人的地方,就有江湖
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去終止一個進程的執行?各個進程之間是如何相互協作工作的?什麽是前臺進程?後臺進程?守護進程?孤兒進程?僵屍進程?這些都是本期課程的學習重點。
課程視頻學習主頁:https://edu.51cto.com/sd/6e080

Linux下的進程江湖