1.進程
進程是程序的一次動態執行;
進程是程序執行和系統資源管理的最小單位,存在資源的分配;
2.程序
程序是若干指令的集合;
程序是靜態存儲在文件中;
3.進程控制塊
保存創建進程的信息;
4.進程號和進程狀態
系統標識進程;S阻塞 Z 僵尸 R運行
5.進程的分類
1.交互進程:由shell創建,依賴于終端,
終端退出,進程退出;
2.批處理進程:不受終端控制。進入隊列,順序執行
3.守護進程:在后臺運行,獨立于終端,
6.進程的拷貝
子進程對父進程進行的地址資源的基本全部拷貝;
(數據段,代碼段(fork后),緩沖區);
各個進程擁有獨立的虛擬地址空間0-4G;
7.Fork函數理解
Fork父進程執行一次,但是操作系統會給父子進程不同的返回值;
8.孤兒進程
父進程先于子進程退出;被init收養;
9.終止進程
Exit; _exit; return (main);fflush緩沖區區別
10. 僵尸進程defunct(Z)
子進程已經退出,父進程沒有回收子進程的資源PCB(進程控制塊);
11. 阻塞非阻塞
阻塞:信號的喚醒;等待進程退出,回收子進程資源;
非阻塞:立即返回,時刻輪詢;
12. 退出狀態返回wait
Wait返回保存子進程exit退出時的退出狀態;
Exit()退出狀態;
實際編程時,可以通過wait系統調用接收子進程的退出狀態,來進行相應的處理。
13. Wait和waitpid
Wait阻塞父進程等待任意子進程結束,返回結束進程的進程號
Waitpid
Waitpid(-1,int *status,0);=== wait(int *status)
非阻塞:
如果沒有等到結果,則返回0;
如果等到,則返回退出進程的PID
14. Exec函數族(概念)
通過調用exec函數來取代原有進程的數據段,代碼段,堆棧段來執行另外一個程序。
在形式上實現了程序間的調用;
15. Exec函數的總結
1.可執行文件的查找方式 :
帶路徑execl/execv
省略路徑execlp/execvp
指定路徑execle/execve
2.參數的傳遞v
Char * 列舉; char * [] 指針數組;
3.環境變量的使用e
指定環境變量,可執行文件的查找路徑
16. 進程的內存空間
進程的虛擬內存是操作系統在邏輯上假想的一片內存
進程的虛擬內存只會在程序實際運行過程中,需要被訪問到的部分被映射到實際的物理內存,映射通過頁表的實現;虛擬內存空間大,只是代表了他能訪問的內存空間比較大,不帶表他占用的實際的物理內存大;通過TOP命令來查看;進程之間通過。
進程的內存圖