0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Linux應(yīng)用開發(fā)之進(jìn)程和程序

嵌入式應(yīng)用研究院 ? 來(lái)源:嵌入式應(yīng)用研究院 ? 2023-06-04 16:35 ? 次閱讀

1.進(jìn)程和程序

進(jìn)程是一個(gè)可執(zhí)行程序的實(shí)例,程序包含了一系列信息文件,這些信息描述了如何在運(yùn)行期間創(chuàng)建一個(gè)進(jìn)程:

二進(jìn)制格式標(biāo)識(shí) :包含用于描述可執(zhí)行文件格式的元信息,內(nèi)核根據(jù)此信息來(lái)解釋文件中的其他信息:

a.out(匯編程序輸出)

COFF(通用文件格式)

ELF(可執(zhí)行連接格式),目前大多數(shù) linux 實(shí)現(xiàn)采用此種方式,具有更多優(yōu)點(diǎn)

機(jī)器語(yǔ)言指令 :對(duì)程序算法進(jìn)行編碼

程序入口地址 :表示程序開始執(zhí)行時(shí)的起始指令位置

數(shù)據(jù) :程序文件包含的變量初始值和程序使用的字面量值(比如字符串)

符號(hào)表及重定位表 :描述程序中函數(shù)和變量的位置及名稱,包括調(diào)試和運(yùn)行時(shí)的符號(hào)解析(動(dòng)態(tài)鏈接)

共享庫(kù)和動(dòng)態(tài)鏈接信息 :程序文件所包含的一些字段,列出程序運(yùn)行時(shí)需要使用的共享庫(kù),以及加載共享庫(kù)的動(dòng)態(tài)鏈接器的路徑名

其他信息 :程序文件還包含了很多其他信息,用以描述如何創(chuàng)建進(jìn)程

可以用一個(gè)程序來(lái)創(chuàng)建很多進(jìn)程。

從內(nèi)核角度來(lái)看:

進(jìn)程是內(nèi)核定義的抽象的實(shí)體,并為該實(shí)體分配用以執(zhí)行程序的各項(xiàng)系統(tǒng)資源。

進(jìn)程由用戶內(nèi)存空間和一系列內(nèi)核數(shù)據(jù)結(jié)構(gòu)組成,用戶內(nèi)存空間包含了程序代碼及代碼所使用的變量,內(nèi)核數(shù)據(jù)結(jié)構(gòu)則用于維護(hù)進(jìn)程狀態(tài)信息,其中包括:

進(jìn)程相關(guān)的標(biāo)識(shí)號(hào)

虛擬內(nèi)存表

打開文件的描述表

信號(hào)傳遞和處理的相關(guān)信息

進(jìn)程資源使用及限制

當(dāng)前工作目錄

一些其他信息

2.進(jìn)程號(hào)和父進(jìn)程號(hào)

每個(gè)進(jìn)程都有一個(gè)進(jìn)程號(hào) PID,是一個(gè)正數(shù),唯一標(biāo)識(shí)系統(tǒng)中的某個(gè)進(jìn)程。

#include 
#include 

pid_t getpid(void);

getpid 返回值的數(shù)據(jù)類型是 pid_t ,專用于存儲(chǔ)進(jìn)程號(hào)

Linux 內(nèi)核限制進(jìn)程號(hào)需要小于 32767(內(nèi)核常量 PID_MAX 定義),新進(jìn)程創(chuàng)建時(shí),內(nèi)核會(huì)按順序?qū)⒁粋€(gè)可用的進(jìn)程號(hào)分配給其使用,進(jìn)程號(hào)到達(dá) 32767 的限制時(shí),內(nèi)核將重置進(jìn)程號(hào)計(jì)數(shù)器為300(不是1)

#include 
#include 

pid_t getppid(void);

getppid 獲取父進(jìn)程的進(jìn)程號(hào)

看 /proc/PID/status 文件提供的 PPid 字段可以獲知每個(gè)進(jìn)程的父進(jìn)程

pstree 命令可以查看進(jìn)程家族樹

3.進(jìn)程內(nèi)存布局

每個(gè)進(jìn)程所分配的內(nèi)存都由很多虛擬內(nèi)存邏輯劃分的部分,稱之為 "段":

文本段 :包含了進(jìn)程運(yùn)行的程序機(jī)器語(yǔ)言指令,文本段是只讀的,也是可共享的

初始化數(shù)據(jù)段 :包含顯式初始化的全局變量和靜態(tài)變量

未初始化數(shù)據(jù)段 :包含了未顯示初始化的全局變量和靜態(tài)變量,程序啟動(dòng)之前,系統(tǒng)將本段內(nèi)所有內(nèi)存初始化為0,這個(gè)段又稱為 BSS(block started by symbol) 段。未初始化的全局變量和靜態(tài)變量與初始化的全局變量和靜態(tài)變量分開放的原因:

程序在磁盤存儲(chǔ)時(shí),沒(méi)有必要為未經(jīng)初始化的變量分配存儲(chǔ)空間

可執(zhí)行文件只需要記錄未初始化數(shù)據(jù)段的位置及大小,直到運(yùn)行時(shí)再有程序加載器來(lái)分配這一空間

棧:動(dòng)態(tài)增長(zhǎng)和收縮的段,由棧幀組成,系統(tǒng)會(huì)為每個(gè)當(dāng)前調(diào)用的函數(shù)分配一個(gè)棧幀,棧幀中存儲(chǔ)了函數(shù)的局部變量,實(shí)參和返回值

堆 :在運(yùn)行時(shí)為變量動(dòng)態(tài)進(jìn)行分配的一塊區(qū)域,堆頂端稱為 program break

初始化數(shù)據(jù)段和未初始化數(shù)據(jù)段又常被稱為用戶初始化數(shù)據(jù)段和零初始化數(shù)據(jù)段。

size 命令可以顯示二進(jìn)制文件的文本段,初始化數(shù)據(jù)段,未初始化數(shù)據(jù)段的大小。

10c07d58-025d-11ee-90ce-dac502259ad0.png

argv 和 environ 用來(lái)存儲(chǔ)程序的命令行實(shí)參和環(huán)境列表

十六進(jìn)制的地址會(huì)因?yàn)閮?nèi)核配置和程序鏈接選項(xiàng)的差異而有所不同

灰色區(qū)域表示這些范圍在進(jìn)程虛擬地址空間中不可用,也就是說(shuō)沒(méi)有為這些區(qū)域創(chuàng)建頁(yè)表

4.虛擬內(nèi)存管理

linux 內(nèi)核采用虛擬內(nèi)存管理技術(shù),該技術(shù)利用了大多數(shù)程序的一個(gè)典型特征,即訪問(wèn)局部性:要求高效使用 CPU 和 RAM(物理內(nèi)存)資源:

空間局部性 :程序傾向于訪問(wèn)在最近訪問(wèn)過(guò)的內(nèi)存地址附近的內(nèi)存(指令是順序執(zhí)行的)

時(shí)間局部性 :程序傾向于在不久將來(lái)再次訪問(wèn)最近剛訪問(wèn)的內(nèi)存地址(由于循環(huán))

正是因?yàn)榫植啃蕴卣?,使得程序即便在僅有部分地址空間存在于 RAM 中,依然可以獲得執(zhí)行。

虛擬內(nèi)存的規(guī)劃之一就是將每個(gè)程序使用的內(nèi)存切割成小型的,固定大小的 "頁(yè)" 單元。相應(yīng)的,將 RAM 劃分成一系列與虛擬頁(yè)尺寸相同的頁(yè)幀:

任意時(shí)刻,每個(gè)程序僅有部分頁(yè)駐留在物理內(nèi)存頁(yè)幀中,這些頁(yè)構(gòu)成了所謂的駐留集

程序未使用的頁(yè)拷貝保存在交換區(qū),交換區(qū)是磁盤空間中的保留區(qū)域,是作為計(jì)算機(jī) RAM 補(bǔ)充,僅在需要時(shí)才會(huì)載入物理內(nèi)存

若進(jìn)程欲訪問(wèn)的頁(yè)面并未駐留在物理內(nèi)存中,將會(huì)發(fā)生頁(yè)面錯(cuò)誤(page fault),內(nèi)核即刻掛起進(jìn)程的執(zhí)行,同時(shí)從磁盤中將該頁(yè)面載入內(nèi)存

頁(yè)面的大小通常為 4096 個(gè)字節(jié),但也有的實(shí)現(xiàn)使用更大的頁(yè)面。

內(nèi)核中維護(hù)了一張頁(yè)表,該頁(yè)表描述了每頁(yè)在進(jìn)程虛擬地址空間中的位置:頁(yè)表中的每個(gè)條目要么指出這個(gè)虛擬頁(yè)面在 RAM 中的具體位置,要么表明其駐留在磁盤上。

進(jìn)程虛擬地址空間中,并非所有的地址范圍都需要頁(yè)表?xiàng)l目:

由于可能存在大段的虛擬地址空間并未投入使用,因此也不需要為其維護(hù)頁(yè)表?xiàng)l目

進(jìn)程試圖訪問(wèn)的地址無(wú)頁(yè)表?xiàng)l目與之對(duì)應(yīng),那么進(jìn)程將收到 SIGSEGV 信號(hào)

由于內(nèi)核能夠?yàn)檫M(jìn)程分配和釋放頁(yè)和頁(yè)表?xiàng)l目,所以進(jìn)程的有效地址范圍在其聲明周期內(nèi)可以發(fā)生變化:

棧向下增長(zhǎng)超出了之前未達(dá)到的位置

堆中分配或者釋放內(nèi)存時(shí)引起 program break 位置的變化

調(diào)用 shmat() 連接 System V 共享內(nèi)存區(qū)或者調(diào)用 shmdt() 脫離共享內(nèi)存區(qū)時(shí)

調(diào)用 mmap() 創(chuàng)建內(nèi)存映射時(shí),或者調(diào)用 munmap() 解除內(nèi)存映射時(shí)

10e62206-025d-11ee-90ce-dac502259ad0.png

虛擬內(nèi)存的實(shí)現(xiàn)需要硬件中分頁(yè)內(nèi)存管理單元(PMMU)的支持,PMMU 把要訪問(wèn)的每個(gè)虛擬地址轉(zhuǎn)換成相應(yīng)的物理內(nèi)存地址,當(dāng)特定虛擬內(nèi)存地址所對(duì)應(yīng)的頁(yè)沒(méi)有駐留在 RAM 中時(shí),將以頁(yè)面錯(cuò)誤通知內(nèi)核。

虛擬內(nèi)存管理使虛擬地址空間與 RAM 物理地址隔離,帶來(lái)的優(yōu)點(diǎn):

進(jìn)程與進(jìn)程,進(jìn)程與內(nèi)核相互隔離,一個(gè)進(jìn)程不能讀寫另一個(gè)進(jìn)程或內(nèi)核中的數(shù)據(jù),因?yàn)槊總€(gè)進(jìn)程的頁(yè)表?xiàng)l目指向 RAM 或交換分區(qū)中不同的物理頁(yè)面集合

適當(dāng)情況下,兩個(gè)或者更多的進(jìn)程能夠共享內(nèi)存,因?yàn)閮?nèi)核可以使不同進(jìn)程的頁(yè)表?xiàng)l目指向相同的 RAM 頁(yè),經(jīng)常發(fā)生在下面的情形:

多個(gè)程序執(zhí)行相同的程序文件或者加載相同的共享庫(kù)時(shí),會(huì)共享一份代碼副本

可以使用 shmget() 和 mmap() 等系統(tǒng)調(diào)用顯式的請(qǐng)求與其它進(jìn)程共享內(nèi)存區(qū),這么做是出于通信的目的

便于實(shí)現(xiàn)內(nèi)存保護(hù)機(jī)制,可以對(duì)頁(yè)表?xiàng)l目進(jìn)行標(biāo)記,以表示相關(guān)頁(yè)面內(nèi)容是可讀、可寫、可執(zhí)行,多個(gè)進(jìn)程共享 RAM 頁(yè)面時(shí),允許每個(gè)進(jìn)程對(duì)內(nèi)存采取不同的保護(hù)措施,例如一個(gè)進(jìn)程可能以只讀方式訪問(wèn)某頁(yè)面,而另一進(jìn)程則以讀寫方式訪問(wèn)同一頁(yè)面

程序員和編譯器、鏈接器之類的工具無(wú)需關(guān)注在 RAM 中的物理布局

因?yàn)樾枰v留在內(nèi)存中的僅是程序的一部分,所以程序在加載和運(yùn)行時(shí)都很快,而且,一個(gè)進(jìn)程所占用的虛擬內(nèi)存大小能夠超出 RAM 容量

每個(gè)進(jìn)程使用的 RAM 減少了,RAM 中同時(shí)可以容納的進(jìn)程數(shù)量就增多了,從而任意時(shí)刻,CPU 都可執(zhí)行至少一個(gè)進(jìn)程,CPU 的利用率也會(huì)提高

5.棧和棧幀

11023fea-025d-11ee-90ce-dac502259ad0.png

棧駐留在內(nèi)存的高端,并向下增長(zhǎng),專用寄存器——棧指針(stack pointer),用于跟蹤當(dāng)前棧頂。

每次函數(shù)調(diào)用時(shí),會(huì)在棧上新分配一幀,每當(dāng)函數(shù)返回,再?gòu)臈I蠈⒋藥迫ァ?/p>

通常將這里的棧稱為用戶棧,以便與內(nèi)核棧加以區(qū)分,內(nèi)核棧是每個(gè)進(jìn)程駐留在內(nèi)核內(nèi)存中的內(nèi)存區(qū)域,在執(zhí)行系統(tǒng)調(diào)用的過(guò)程中供內(nèi)核內(nèi)部函數(shù)調(diào)用使用。

每個(gè)用戶棧包括的信息:

函數(shù)實(shí)參和局部變量

函數(shù)調(diào)用鏈接信息

6.命令行參數(shù)

111a1d86-025d-11ee-90ce-dac502259ad0.png

argc 表示命令行參數(shù)的個(gè)數(shù)

argv 是指向命令行參數(shù)的指針數(shù)組,每一個(gè)參數(shù)都是以空字符 null 結(jié)尾的字符串,第一個(gè)參數(shù),即 argv[0] 通常是程序名,argv[argc] 是 NULL

要想從程序內(nèi)的任一位置訪問(wèn)部分或者全部?jī)?nèi)容,還有兩種方法:

/proc/PID/cmdline 文件可以讀取任一進(jìn)程的命令行參數(shù),每個(gè)參數(shù)都以 null 字節(jié)終止,程序可以通過(guò) /proc/self/cmdline 文件訪問(wèn)自己的命令行參數(shù)

GNC C 語(yǔ)言庫(kù)提供兩個(gè)全局變量,可以在程序中內(nèi)獲取調(diào)用該程序時(shí)的程序名稱,即命令行的第一個(gè)參數(shù),定義 _GNU_SOURCE 后,從 中獲?。?/p>

program_invocation_name :提供了用于調(diào)用該程序的完整路徑名

program_invocation_short_name :提供了程序基本名稱

argv 駐留于進(jìn)程棧之上的一個(gè)內(nèi)存區(qū)域,此區(qū)域可存儲(chǔ)的字節(jié)數(shù)有上限要求, 中的 ARG_MAX 常量規(guī)定了其大小,一般要求下限是 4096 個(gè)字節(jié),調(diào)用 sysconf(_SC_ARB_MAX) 確定此值。

7.環(huán)境列表

每個(gè)進(jìn)程都有一個(gè)與其相關(guān)的稱之為環(huán)境列表的字符串?dāng)?shù)組,或者簡(jiǎn)稱為環(huán)境:

環(huán)境是 "名稱-值" 的成對(duì)集合

常將列表中的名稱稱為環(huán)境變量

新進(jìn)程在創(chuàng)建時(shí)會(huì)繼承其父進(jìn)程的環(huán)境副本,這種傳遞是單向的,一次性的,子進(jìn)程創(chuàng)建后,父、子進(jìn)程均可各自修改自己的環(huán)境變量,且這些變更對(duì)對(duì)方是不可見的

環(huán)境變量常用于 shell 中,通過(guò)在自身環(huán)境變量中存放變量值,shell 可以確保將這些值傳遞給其所創(chuàng)建的進(jìn)程

可以通過(guò)設(shè)置環(huán)境變量來(lái)改變一些庫(kù)函數(shù)的行為

大多數(shù) shell 使用 export 添加環(huán)境變量:

export SHELL=/bin/bash

printenv 命令可以顯示當(dāng)前的環(huán)境列表,export 命令不加任何參數(shù)時(shí)也可以達(dá)到此目的。

通過(guò) /proc/PID/environ 文件可以檢查任一進(jìn)程的環(huán)境列表。

8.從程序中訪問(wèn)環(huán)境

C 語(yǔ)言使用全局變量 char** environ 訪問(wèn)列表。

1133efa4-025d-11ee-90ce-dac502259ad0.png

#include 

char *getenv(const char *name);

根據(jù)換了變量的名稱,返回相應(yīng)的字符串指針,如果該環(huán)境變量不存在則返回 NULL

9.修改環(huán)境

#include 

int putenv(char *string);

向調(diào)用進(jìn)程的環(huán)境添加一個(gè)新的變量或者修改一個(gè)已經(jīng)存在的變量值

string 是指向 name=value 形式的字符串

調(diào)用函數(shù)后,該字符串就稱為環(huán)境變量的一部分,environ 變量的某一元素的指向與 string 參數(shù)指向相同,而非 string 參數(shù)指向字符串的副本,因此:

后續(xù)修改 string 將會(huì)影響進(jìn)程的環(huán)境

string 參數(shù)不能是??臻g變量

調(diào)用失敗返回非 0 值,而不是 -1

glibc 中將 putenv 做了非標(biāo)準(zhǔn)擴(kuò)展,如果 string 中不包含 =,環(huán)境列表將會(huì)移除以 string 命名的環(huán)境變量

#include 

int setenv(const char *name, const char *value, int overwrite);

會(huì)為 name=value 的字符串分配內(nèi)存緩沖區(qū),并將 name 和 value 所指的字符串復(fù)制到緩沖區(qū),創(chuàng)建一個(gè)新的環(huán)境變量

name 結(jié)尾處 和value開始處不要加 =,因?yàn)?setenv() 會(huì)自動(dòng)添加

name 的環(huán)境變量在環(huán)境中已經(jīng)存在,且參數(shù) overwrite 的值是0,則 setenv() 不改變環(huán)境,如果 overwrite 的值非0,則 setenv() 將總是改變環(huán)境

之后修改 name 和 value 以及使用棧上變量都不會(huì)有影響

#include 

int unsetenv(const char *name);

將 name 指定的環(huán)境變量從環(huán)境列表中移除

#include 

int clearenv(void);

清除環(huán)境變量,即設(shè)置 environ=NULL

需要預(yù)定義 _SVID_SOURCE 或者_(dá)BSD_SOURCE

使用 setenv 和 clearenv() 可能導(dǎo)致內(nèi)存泄漏:

調(diào)用 setenv 分配一塊內(nèi)存緩沖區(qū),隨即稱為進(jìn)程環(huán)境的一部分,調(diào)用 clearenv 并不會(huì)釋放上述的緩沖區(qū)

但是一般這不會(huì)稱為一個(gè)問(wèn)題,因?yàn)槌绦蛞话阍陂_始處調(diào)用 clearenv() 以清除繼承自父進(jìn)程的環(huán)境

10.執(zhí)行非局部跳轉(zhuǎn)

#include 

int setjmp(jmp_buf env);
void longjmp(jmp_buf env, int val);

setjmp() 和 longjmp() 可執(zhí)行非局部跳轉(zhuǎn),"非局部" 指的是跳轉(zhuǎn)目標(biāo)為當(dāng)前執(zhí)行函數(shù)之外的某個(gè)位置

setjmp() 調(diào)用為后續(xù) longjmp() 調(diào)用執(zhí)行的跳轉(zhuǎn)確立了跳轉(zhuǎn)目標(biāo),該目標(biāo)就是程序發(fā)起 setjmp() 調(diào)用的位置

通過(guò)查看 setjmp() 返回的整數(shù)值,可以區(qū)分 setjmp() 是初始返回還是第二次返回:

初始調(diào)用返回 0

后續(xù) "偽返回" 的返回值為 longjmp() 調(diào)用中 val 參數(shù)指定的任意值,如果 val 指定為 0,則 longjmp() 實(shí)際返回時(shí)用 1 替換

setjmp() 將環(huán)境變量 env 參數(shù)中,調(diào)用 longjmp() 時(shí)必須指定相同的 env 變量,因?yàn)樘D(zhuǎn)發(fā)生在不同的函數(shù),所以:

env 定義為全局變量

env 作為函數(shù)的參數(shù)傳遞,此種方法比較少見

調(diào)用 setjmp() 時(shí),env 除了保存當(dāng)前進(jìn)程的其他信息外,還保存了程序計(jì)數(shù)器(指向當(dāng)前正在執(zhí)行的機(jī)器語(yǔ)言指令) 和棧指針寄存器(標(biāo)記棧頂)的副本,這些信息保證后續(xù) longjmp() 調(diào)用完成后執(zhí)行兩個(gè)關(guān)鍵的操作:

將發(fā)起 longjmp() 調(diào)用的函數(shù)與之前調(diào)用 setjmp() 的函數(shù)之間的函數(shù)棧從棧上剝離,稱為棧解開,這是通過(guò)將棧指針寄存器重置為 env 參數(shù)的保存值

重置程序計(jì)數(shù)寄存器,使得程序得以從初始的 setjmp() 調(diào)用位置繼續(xù)執(zhí)行,這是通過(guò) env 參數(shù)中的程序計(jì)數(shù)寄存器實(shí)現(xiàn)的

編譯器優(yōu)化會(huì)重組程序的指令執(zhí)行順序,并在 CPU 寄存器中而非 RAM 中存儲(chǔ)某些變量,這些優(yōu)化不會(huì)將 setjmp() 和 longjmp() 考慮在內(nèi),因而當(dāng)有優(yōu)化時(shí),可能出錯(cuò)。

程序中應(yīng)該盡可能避免使用非局部跳轉(zhuǎn)。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11177

    瀏覽量

    208489
  • 計(jì)數(shù)器
    +關(guān)注

    關(guān)注

    32

    文章

    2248

    瀏覽量

    94184
  • PID控制
    +關(guān)注

    關(guān)注

    10

    文章

    449

    瀏覽量

    39982
  • LINUX內(nèi)核
    +關(guān)注

    關(guān)注

    1

    文章

    316

    瀏覽量

    21580
  • 機(jī)器語(yǔ)言
    +關(guān)注

    關(guān)注

    0

    文章

    35

    瀏覽量

    10735

原文標(biāo)題:Linux應(yīng)用開發(fā)之進(jìn)程和程序

文章出處:【微信號(hào):嵌入式應(yīng)用研究院,微信公眾號(hào):嵌入式應(yīng)用研究院】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    Linux開發(fā)_Linux進(jìn)程編程

    介紹Linux進(jìn)程概念、進(jìn)程信號(hào)捕獲、進(jìn)程管理相關(guān)的命令的使用等知識(shí)點(diǎn)。
    的頭像 發(fā)表于 09-17 15:38 ?1298次閱讀
    <b class='flag-5'>Linux</b><b class='flag-5'>開發(fā)</b>_<b class='flag-5'>Linux</b>下<b class='flag-5'>進(jìn)程</b>編程

    Linux進(jìn)程間如何實(shí)現(xiàn)共享內(nèi)存通信

    這次我們來(lái)講一下Linux進(jìn)程通信中重要的通信方式:共享內(nèi)存作為Linux軟件開發(fā)攻城獅,進(jìn)程間通信是必須熟練掌握的重要技能,而共享內(nèi)存是在
    發(fā)表于 04-26 17:14 ?663次閱讀

    Linux進(jìn)程相關(guān)知識(shí)

    進(jìn)程是在你的系統(tǒng)上運(yùn)行的程序。它們由內(nèi)核管理,每個(gè)進(jìn)程都有一個(gè)與關(guān)聯(lián)的ID,稱為進(jìn)程ID(PID)。這個(gè)PID是按照
    發(fā)表于 08-09 10:02 ?276次閱讀
    <b class='flag-5'>Linux</b>下<b class='flag-5'>進(jìn)程</b>相關(guān)知識(shí)

    Linux下的進(jìn)程結(jié)構(gòu)

    `#嵌入式培訓(xùn)#華清遠(yuǎn)見嵌入式linux學(xué)習(xí)資料《Linux下的進(jìn)程結(jié)構(gòu)》,進(jìn)程不但包括程序的指令和數(shù)據(jù),而且包括
    發(fā)表于 08-05 11:05

    Linux學(xué)習(xí)雜談】進(jìn)程的誕生和消失

    死機(jī)。 來(lái)看下幾個(gè)進(jìn)程的概念:僵尸進(jìn)程:(1)子進(jìn)程先于父進(jìn)程結(jié)束Linux系統(tǒng)設(shè)計(jì)的時(shí)候,當(dāng)每一個(gè)進(jìn)程
    發(fā)表于 09-01 20:38

    Linux進(jìn)程管理

    Linux進(jìn)程管理
    發(fā)表于 05-20 10:53

    Linux進(jìn)程管理

    Linux進(jìn)程管理 本章主要介紹進(jìn)程的概念、狀態(tài)、構(gòu)成以及Linux進(jìn)程的相關(guān)知識(shí)。 掌握進(jìn)程
    發(fā)表于 04-28 14:57 ?0次下載

    嵌入式Linux應(yīng)用程序開發(fā)詳解

    。接著系統(tǒng)地講解了嵌入式linux的環(huán)境搭建,以及嵌入式linux的i/o與文件系統(tǒng)的開發(fā)、進(jìn)程控制開發(fā)、
    發(fā)表于 06-17 17:24 ?61次下載

    進(jìn)程間通信Linux進(jìn)程間通信概述

    在上一章中,讀者已經(jīng)知道了進(jìn)程是一個(gè)程序的一次執(zhí)行。這里所說(shuō)的進(jìn)程一般是指運(yùn)行在用戶態(tài)的進(jìn)程,而由于處于用戶態(tài)的不同進(jìn)程之間是彼此隔離的,就
    發(fā)表于 10-18 16:21 ?0次下載

    進(jìn)程控制開發(fā)編寫多進(jìn)程程序實(shí)驗(yàn)解析

    7.4.1 編寫多進(jìn)程程序 1.實(shí)驗(yàn)?zāi)康?通過(guò)編寫多進(jìn)程程序,使讀者熟練掌握f(shuō)ork()、exec()、wait()和waitpid()等函數(shù)的使用,進(jìn)一步理解在
    發(fā)表于 10-18 16:33 ?0次下載
    <b class='flag-5'>進(jìn)程</b>控制<b class='flag-5'>開發(fā)</b><b class='flag-5'>之</b>編寫多<b class='flag-5'>進(jìn)程</b><b class='flag-5'>程序</b>實(shí)驗(yàn)解析

    基于Linux進(jìn)程管理的詳細(xì)剖析

    上一篇,我們講到了Linux內(nèi)核開發(fā)和應(yīng)用程序開發(fā),今天我們來(lái)講講Linux重點(diǎn)部分Linux
    的頭像 發(fā)表于 01-26 11:24 ?3677次閱讀
    基于<b class='flag-5'>Linux</b><b class='flag-5'>進(jìn)程</b>管理的詳細(xì)剖析

    linux進(jìn)程怎么查看

    Linux系統(tǒng)中,每個(gè)程序啟動(dòng)后可以創(chuàng)建一個(gè)或多個(gè)進(jìn)程。例如,提供Web服務(wù)的httpd程序,當(dāng)有大量用戶同時(shí)訪問(wèn)Web頁(yè)面時(shí),httpd程序
    發(fā)表于 05-22 08:56 ?835次閱讀
    <b class='flag-5'>linux</b>的<b class='flag-5'>進(jìn)程</b>怎么查看

    你們知道Linux進(jìn)程是怎樣創(chuàng)建的嗎

    一顆樹的結(jié)構(gòu)。就像下面這樣: ? ? 在Linux中,為了創(chuàng)建一個(gè)子進(jìn)程,父進(jìn)程用系統(tǒng)調(diào)用fork來(lái)創(chuàng)建子進(jìn)程。fork()其實(shí)就是把父進(jìn)程
    的頭像 發(fā)表于 11-09 10:46 ?3234次閱讀
    你們知道<b class='flag-5'>Linux</b>的<b class='flag-5'>進(jìn)程</b>是怎樣創(chuàng)建的嗎

    嵌入式Linux應(yīng)用程序開發(fā)圖形編程

    嵌入式Linux應(yīng)用程序開發(fā)圖形編程資料分享。
    發(fā)表于 04-12 14:50 ?2次下載

    如何在Linux使用ps/pstree/top命令查看進(jìn)程

    Linux 程序的運(yùn)行實(shí)例稱為進(jìn)程。有時(shí)在Linux工作時(shí),您可能需要找出當(dāng)前正在運(yùn)行的進(jìn)程。
    的頭像 發(fā)表于 12-05 17:07 ?1728次閱讀