什么是進程,學霸來(lai)告訴你(ni)
時間:2018-08-27 來源:未知
進程(cheng):是一(yi)個動態(tai)的概念,它是程(cheng)序執(zhi)行的過(guo)程(cheng),存在于內存中,包括了(le)動態(tai)創建、
調度(du)和(he)消亡的(de)(de)(de)整個過程(cheng),進程(cheng)是程(cheng)序(xu)執(zhi)行(xing)和(he)資源管理(li)的(de)(de)(de)最小單元;與程(cheng)序(xu)有(you)著本質的(de)(de)(de)區 別(bie),程(cheng)序(xu)是靜態的(de)(de)(de),它是一些保存在磁盤上(shang)的(de)(de)(de)指令的(de)(de)(de)有(you)序(xu)集合,沒(mei)有(you)任何執(zhi)行(xing)的(de)(de)(de)概念;
1.c ----源代碼 a.out-----程(cheng)序(xu) ./a.out 執行該(gai)命令就(jiu)是(shi)啟動了
一個進程
每個(ge)進(jin)程都有(you)自己獨立的內存(cun)空間(jian)(jian),32位(wei)操作(zuo)系(xi)統(0~4G的虛擬(ni)內存(cun)空間(jian)(jian)),存(cun)放進(jin)程相(xiang)關的信息。
在 Linux 中(zhong)(zhong)最(zui)主要(yao)的進程(cheng)標識有進程(cheng)號(PID, Process Idenity Number)和它的父進程(cheng)號(PPID, parent process ID)。其中(zhong)(zhong) PID 惟一地標識一個(ge)進程(cheng)。 PID 和
PPID 都(dou)是非零的正整數。
在 Linux 中獲得當前(qian)(qian)進程的(de) PID 和(he) PPID 的(de)系統(tong)調用函數(shu)為 getpid()和(he)getppid(),通常(chang)程序(xu)獲得當前(qian)(qian)進程的(de)PID 和(he) PPID 之(zhi)后(hou),可以(yi)將其寫入(ru)日志文件以(yi)做備份。
PCB 進程(cheng)控(kong)制塊,進程(cheng)控(kong)制塊包含(han)了進程(cheng)的描述信息(xi)、控(kong)制信息(xi)以及資源信
息,它是(shi)進程(cheng)的(de)一(yi)個靜態描(miao)述(shu)。
在 Linux 中(zhong),進程控制塊中(zhong)的每一(yi)項都是(shi)(shi)一(yi)個 task_struct 結構,它是(shi)(shi)在
include/linux/sched.h中定義的;操作系統通(tong)過PCB來(lai)管理進程 該結構體存放在內核
空間
在 Linux 系(xi)(xi)(xi)統中,進(jin)(jin)程(cheng)(cheng)的(de)(de)執(zhi)行模(mo)(mo)式(shi)(shi)劃分(fen)為用(yong)(yong)戶(hu)模(mo)(mo)式(shi)(shi)和內(nei)(nei)核(he)(he)模(mo)(mo)式(shi)(shi)。如果(guo)當前運(yun)行的(de)(de)是用(yong)(yong)戶(hu)程(cheng)(cheng)序(xu)、應用(yong)(yong)程(cheng)(cheng)序(xu)或者(zhe)內(nei)(nei)核(he)(he)之外的(de)(de)系(xi)(xi)(xi)統程(cheng)(cheng)序(xu),那么對應進(jin)(jin)程(cheng)(cheng)就在用(yong)(yong)戶(hu)模(mo)(mo)式(shi)(shi)下(xia)(xia)運(yun)行;如果(guo) 在用(yong)(yong)戶(hu)程(cheng)(cheng)序(xu)執(zhi)行過(guo)程(cheng)(cheng)中出現系(xi)(xi)(xi)統調用(yong)(yong)或者(zhe)發(fa)生中斷事件(jian),那么就要運(yun)行操(cao)作系(xi)(xi)(xi)統(即核(he)(he) 心)程(cheng)(cheng)序(xu),進(jin)(jin)程(cheng)(cheng)模(mo)(mo)式(shi)(shi)就變(bian)成內(nei)(nei)核(he)(he)模(mo)(mo)式(shi)(shi)。在內(nei)(nei)核(he)(he)模(mo)(mo)式(shi)(shi)下(xia)(xia)運(yun)行的(de)(de)進(jin)(jin)程(cheng)(cheng)可以(yi)執(zhi)行機器(qi)的(de)(de)特權指 令,而且此時該進(jin)(jin)程(cheng)(cheng)的(de)(de)運(yun)行不(bu)(bu)受用(yong)(yong)戶(hu)的(de)(de)干(gan)擾,即使(shi)是 root 用(yong)(yong)戶(hu)也不(bu)(bu)能干(gan)擾內(nei)(nei)核(he)(he)模(mo)(mo)式(shi)(shi)下(xia)(xia)進(jin)(jin)程(cheng)(cheng)的(de)(de)運(yun)行。用(yong)(yong)戶(hu)進(jin)(jin)程(cheng)(cheng)既(ji)可以(yi)在用(yong)(yong)戶(hu)模(mo)(mo)式(shi)(shi)下(xia)(xia)運(yun)行,也可以(yi)在內(nei)(nei)核(he)(he)模(mo)(mo)式(shi)(shi)下(xia)(xia)運(yun)行,
進程的(de)類型(xing):
1. 交互進(jin)程(cheng):該(gai)類(lei)進(jin)程(cheng)是由shell控制(zhi)和運(yun)行(xing)的。交互進(jin)程(cheng)既可以(yi)在(zai)前臺(tai)運(yun)行(xing),也(ye)可以(yi)在(zai)后臺(tai)運(yun)行(xing)。
2. 批(pi)處理進(jin)程:該(gai)類(lei)進(jin)程不屬于某個終端,它被提交(jiao)到一個隊(dui)列中以便順序執行。
3. 守護進程(cheng):該類(lei)進程(cheng)在(zai)(zai)后臺運行。它一般在(zai)(zai)Linux啟動時開始(shi)執行,系統關(guan)閉時才結束。(重點)
進程是(shi)程序(xu)的(de)執(zhi)行過程,根據它的(de)生命(ming)周(zhou)期(qi)可以劃分成 3 種狀(zhuang)態。
□ 執行態:該進(jin)程(cheng)正在(zai)運行,即進(jin)程(cheng)正在(zai)占用 CPU。
□ 就(jiu)緒態(tai):進程(cheng)已經(jing)具備執行的(de)一(yi)切條件(jian),正在等(deng)待分配(pei) CPU 的(de)處(chu)理時(shi)間片。
□
等(deng)待態(tai):進程不能使用 CPU,若等(deng)待事件(jian)發生(等(deng)待的資源分配到)則(ze)可將其(qi)喚醒(xing)。
Linux 系統(tong)是一(yi)個(ge)多進程的(de)(de)系統(tong),它的(de)(de)進程之間(jian)具有并行性、互(hu)不干(gan)擾等特點。各個(ge)進程都運行在獨立的(de)(de)虛擬地址(zhi)空間(jian),因此,即使一(yi)個(ge)進程發生異常,它也不會(hui)影響到系統(tong) 中的(de)(de)其他進程。
Linux 中的進(jin)程包含(han) 3 個段(duan),分別為“數據段(duan)”、“代(dai)碼段(duan)”和“堆棧(zhan)段(duan)”。
□ “數據(ju)(ju)(ju)段(duan)”存放(fang)的(de)(de)是(shi)全(quan)局(ju)變(bian)量、常數以(yi)及動(dong)態數據(ju)(ju)(ju)分(fen)(fen)配的(de)(de)數據(ju)(ju)(ju)空(kong)間(jian),根據(ju)(ju)(ju)存放(fang)的(de)(de)數據(ju)(ju)(ju),數據(ju)(ju)(ju)段(duan)又可以(yi)分(fen)(fen)成普通數據(ju)(ju)(ju)段(duan)(包括可讀(du)可寫/只讀(du)數據(ju)(ju)(ju)段(duan), 存放(fang)靜態初始化的(de)(de)全(quan)局(ju)變(bian)量或常量)、BSS 數據(ju)(ju)(ju)段(duan)(存放(fang)未初始化的(de)(de)全(quan)局(ju)變(bian)量)以(yi)及堆(存放(fang)動(dong)態分(fen)(fen)配的(de)(de)數
據)。
□ “代(dai)(dai)碼段”存放的是程序代(dai)(dai)碼的數據。
□ “堆棧段”存放(fang)的是子程序(xu)的返回地址(zhi)、子程序(xu)的參數以及程序(xu)的局部變量等。

Linux 下的(de)進程管理包(bao)括啟動進程和調度(du)進程
1、啟動進程(cheng)
Linux 下啟動(dong)(dong)一個進(jin)(jin)(jin)程(cheng)有兩種主要途(tu)徑:手工(gong)啟動(dong)(dong)和調度啟動(dong)(dong)。手工(gong)啟動(dong)(dong)是由用(yong)戶(hu)(hu)輸入命令直(zhi)接啟動(dong)(dong)進(jin)(jin)(jin)程(cheng),而調度啟動(dong)(dong)是指系統根(gen)據用(yong)戶(hu)(hu)的(de)設置(zhi)自行(xing)啟動(dong)(dong)進(jin)(jin)(jin)程(cheng)。
1、手工啟(qi)動進程又可分為前(qian)臺啟(qi)動和后(hou)臺啟(qi)動。
2、調度啟動(dong):用戶就(jiu)可(ke)以事先進(jin)行(xing)調度安(an)排(pai),指定任(ren)務(wu)運(yun)行(xing)的時間或者場合,到(dao)時候系(xi)統就(jiu)會自(zi)動(dong)完成這一切工作。
2、調度進程
調度進程包括對進程的中斷操作、改(gai)變優先級、查看進程狀態等,
選項參數含義
ps查(cha)看系統(tong)中給(gei)的進程
top動態顯(xian)示系統中的進程(cheng)
nice按用戶指(zhi)定的優先(xian)級運行
renice改變正在運行進程的優先級
kill向進(jin)程(cheng)發出(chu)信號(包括后臺進(jin)程(cheng))
crontab用于(yu)安裝、刪除或者列出用于(yu)驅動(dong)cron后(hou)臺進程(cheng)的任務
bg將掛起的進程放到(dao)后臺執行

