長沙市住建委和城鄉(xiāng)建設(shè)網(wǎng)站長沙網(wǎng)絡(luò)公司排名
程序與進(jìn)程 :
程序 :
什么是程序 ???
偽官方 : 二進(jìn)制文件,文件存儲在磁盤中,例如 /usr/bin 目錄下 。 是靜態(tài)。
簡單講 :
# 我們都學(xué)習(xí)了語言,比如下面這串代碼 👇
print('Hello,Word')
我們將上示代碼保存成一個 python 文件,并且并沒有執(zhí)行它,當(dāng)然了,大家也都清楚,如果執(zhí)行上示文件( 代 碼 ) ,結(jié)果也很簡單,就是打印 Hello,Word 字樣
我們將上示文件保存后,它就是個程序,而且,我們并沒有運(yùn)行它,它呢,就是一個保存在磁盤上的可執(zhí)行文件~!!!
進(jìn)程 :
什么是進(jìn)程 ?
偽官方 :
? 是程序運(yùn)行的過程,動態(tài),有生命周期及運(yùn)行狀態(tài)。
? 進(jìn)程是已啟動的可執(zhí)行程序的運(yùn)行實例,進(jìn)程有以下組成部分 :
已分配內(nèi)存的地址空間
安全屬性,包括所有權(quán)憑據(jù)和特權(quán)
程序代碼的一個或多個執(zhí)行線程
進(jìn)程狀態(tài)
簡單講 : 以上示 代碼為例,
進(jìn)程就可以認(rèn)為是上示代碼的執(zhí)行態(tài),就是現(xiàn)在我們將上示代碼執(zhí)行一下,
我們在介紹 程序 的時候,不是說,把代碼寫出來,不執(zhí)行只保存嘛,那現(xiàn)在,我們
就把它執(zhí)行一下,運(yùn)行起來。
那既然運(yùn)行起來,肯定就有運(yùn)行時間,就是多長時間能運(yùn)行完,就是多長時間能把
那 Hello,Word 顯示在公屏上。
當(dāng)然了,上示代碼肯定運(yùn)行時間特別快,連 1 秒都沒有,CPU 運(yùn)行的快唄~!
那假設(shè),現(xiàn)在來一個 sleep 300 秒 ,那就意味著這個 程序 ( 上示代碼 ) 就得運(yùn)行
5 分鐘了,就是這 5 分鐘 內(nèi) 這個程序一直在運(yùn)行~!!!!
我們解釋下 偽官方 中的 運(yùn)行實例 :
就比如我們上示的,讓代碼 ( sleep 5 分鐘 ),我們說這 5分鐘內(nèi) 這個程序一直在
運(yùn)行 ( 一直在運(yùn)行那它就是一個 進(jìn)程 )
但是,現(xiàn)在,我們在這 5分鐘內(nèi) ,又運(yùn)行了一次 這個程序 ,那意味著什么 ??
意味著,又多了一個進(jìn)程 ( 盡管第一個 那個 5分鐘那個進(jìn)程還沒執(zhí)行完 )
就是說你運(yùn)行程序,運(yùn)行了幾次,那它就占幾個進(jìn)程。
所以說,上面說的,本身運(yùn)行了一個 程序 ( 5 分鐘 ),你在這 5分鐘內(nèi) 又運(yùn)行了
一次,那就是有兩個進(jìn)程。
那這兩個程序也都在運(yùn)行狀態(tài)中,
所以運(yùn)行狀態(tài)中的程序就叫做這個程序的 運(yùn)行實例 。
程序沒啥變化,程序還是那個程序,但是運(yùn)行了兩次,那就意味著有兩個進(jìn)程~!!
程序和進(jìn)程的區(qū)別 :
程序是靜態(tài)的,它只是一組指令的集合,不具有任何的運(yùn)行意義。
而進(jìn)程是程序運(yùn)行的動態(tài)過程~!!
進(jìn)程和程序并不是一一對應(yīng)的關(guān)系,相同的程序運(yùn)行在不同的數(shù)據(jù)集上就是不同的進(jìn)程
進(jìn)程還具有 并發(fā)性 和 交往性 ,而程序是封閉的~!!
進(jìn)程與線程 :
進(jìn)程是操作系統(tǒng)中分配資源的最小單位~!!!
===>>>
進(jìn)程呢,它是需要資源的。
前面我們講了 進(jìn)程的組成部分,
有分配地址, 所有權(quán)憑據(jù)和特權(quán),進(jìn)程狀態(tài)等~!!
線程是操作系統(tǒng)中最小的執(zhí)行單位~!!
===>>>
進(jìn)程還可以繼續(xù)劃分為 好多線程。
一個進(jìn)程可以有多個線程,但是一個線程不可以有多個進(jìn)程~!!
線程只能屬于某一個進(jìn)程。
進(jìn)程與線程的區(qū)別 :
一個進(jìn)程可以擁有多個線程,而一個線程同時只能被一個進(jìn)程所擁有。
線程不能單獨執(zhí)行(它必須依賴于進(jìn)程的資源),但是每一個線程都有程序的入口、執(zhí)行序列以及程序出口,它必須組成進(jìn)程才能被執(zhí)行。
進(jìn)程分類 :
# 進(jìn)程分類以不同標(biāo)準(zhǔn)可以分好多類,我們主要介紹下 : 父進(jìn)程,子進(jìn)程,前臺進(jìn)程,后臺進(jìn)程。
父子進(jìn)程的關(guān)系 :
? 子進(jìn)程是由一個進(jìn)程產(chǎn)生的子進(jìn)程,產(chǎn)生子進(jìn)程的這個進(jìn)程就叫父進(jìn)程。
? 父進(jìn)程終止( 結(jié)束 ) 子進(jìn)程自然終止 ~!
前臺進(jìn)程 :
官方 : 在 shell 提示處理打入命令后,創(chuàng)建一個子進(jìn)程,運(yùn)行命令, Shell 等待命令退出,然
后返回到對用戶給出提示符。這條命令與 Shell 異步運(yùn)行,即在前臺運(yùn)行,用戶在它
完成之前不能執(zhí)行別的命令 。
示例 :
[root@fsw ~]# sleep 300
現(xiàn)在我們要執(zhí)行上示代碼 ( 睡眠 300 秒 )
===>>>

為上示執(zhí)行結(jié)果,會發(fā)現(xiàn),執(zhí)行完成后,當(dāng)前頁面,什么也干不了~!!
這就是對應(yīng)著 官方 解釋的那句話 -- 用戶在完成他之前不能執(zhí)行別的命令~!
( 我們先使用 ctrl z 終止了進(jìn)程 ~!! 我們還得執(zhí)行其它命令呀~!!)
這就是 前臺進(jìn)程~!!
后臺進(jìn)程 :
官方 : 在 Shell 提示處打入命令,若后隨一個 &, Shell 創(chuàng)建子進(jìn)程運(yùn)行此命令,但不等待命
令退出,而直接返回到對用戶給出提示。這條命令與 Shell 同步運(yùn)行,即在后臺運(yùn)行。
“后臺進(jìn)程必須是非交互式的” 。
示例 :
我們繼續(xù)以 sleep 300 為例,不過這次要在代碼后邊 添加一個 &
[root@fsw ~]# sleep 300 &

那你就發(fā)現(xiàn)了,這次我們就可以執(zhí)行別的操作~!!!
這就是 后臺進(jìn)程~!!!!