【2016/1】進程 進程的狀態

版權聲明:本文爲博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/hsgwpj/article/details/50609693

main函數 return 的值是一個從 0 到 255的一個字節的值。

系統進程的初始化:
系統先啓動 0 號進程(不可見不可操控), 然後由它啓動 1 號進程(系統初始化)
0 號進程以實模式運行, 然後由 1 號開始以虛模式在內存上運行
對 kill -9 1 對1號進程無效 , 它屏蔽了所有用戶對其的操作

再服務器上 別用 reboot 要手動停止所有服務之後再關機
— 寫程序時要考慮關機接口, 和平的保存退出

進程是有輩分關係的:
殭屍進程的回收 (父進程的子進程死亡,卻沒被回收)
— 進程號是一個短整形(),如果滿了就沒法再創建進程

如果父進程先於子進程死亡, 那麼它會被 1 號進程收養
— 不會被父進程的父進程收養
— 收養進程的原因是子進程死亡, 要由父進程回收內存

每一個進程存活期間都在內核中存在一個由內核維護的結構體
— proc是一個僞文件系統, 是內存的一個映象而不是硬盤的內容,而且是安全的
— 在/proc/下的所有數字目錄中存在着進程的信息 比如maps是進程的內存空間
— 進程的代碼段是它的私有信息(肉體), 還有數據段(記憶)內存控制塊(細節)
— 進程外部還需要由CPU來執行 如果CPU沒了 它會處於就緒態

 進程的狀態切換關係:
                  運行態
                   >   \
                  /     \
        缺少CPU  /       \(時間片段完成)
                /         \
               <           >
            就緒態 <----- 等待態 (沒有其他資源)

創建進程用 fork(void) 返回一個 pid_t 類型的pid值 有符號

 pstree -ap #查看進程樹
 ps -aux    #查看進程

任何進程都有自己的獨立空間,子進程從父進程繼承來空間,但繼承的同一個變量的值並不一樣
— 父子進程的代碼段是共享的, 上面複製的是數據段
— 父子進程會執行共享的所有無條件限制的代碼

_exit() 庫函數回收子進程內存
_Exit() 粗暴退出

yum groupinstall “Development Tools” 組安裝開發工具 安裝庫

wait來回收子進程, 有多少個子進程就wait多少次 但是會一直掛起
waitpid是針對性的回收, 根據option參數來更改行爲, 可以不需要掛起等待

vfork() 不需要克隆數據表 直接創建一個子進程 *可以查一下
vfork創建的進程,運行時是先子進程運行然後在運行主進程的
— 如果子進程被exec成功了 那麼它也被認定爲結束 子進程退出

execve() 在你的進程中啓動一個新的二進制文件, 同時佔據了你的全部進程空間
exec族的第二個參數通常是它的參數列表, 同時參數列表的第一個元素要是命令本身
— exec創建的進程位於後臺 是1號進程的子進程

env[] 是環境變量的一個數組 比如:PATH=/bin HOME=/home 等
int main(int argc, char**argv, char *env[])
getenv() 函數可以直接得到系統環境變量 需要傳入環境變量的名字
setenv() 函數可以設定環境變量
exporyt(系統命令) 可以設置環境變量

freopen()是被包含於C標準庫頭文件stdio.h中的一個函數,用於重定向輸入輸出流。該函數可以在不代碼原貌的情況下改變輸入輸出環境,但使用時應當保證流是可靠的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章