進程管理詳解

來源:互聯網
上載者:User
文章目錄
  • 與進程屬性相關的欄位

以下內容為<<linux核心編程>>讀書筆記

進程與程式

1. 進程是程式執行的基本單位,程式是有若干函數組成的可執行檔,而進程指的是特定程式的一個執行個體

2. 程式包括:文本段,資料區段,棧,堆,文本段存放CPU所致型的指令;資料區段存放進程操作的所有資料變數;棧存放自動變數和函數資料;堆存放動態記憶體分配的資料;

當進程建立時,子進程收到父進程的資料副本,包括資料空間,堆,棧和進程描述符。

以下為建立進程的執行個體:

#include <sys/types.h>#include <stdio.h>#include <sys/stat.h>#include <fcntl.h>int main(void){int fd;int pid;pid = fork();   //建立進程if(pid==0){execle("/bin/ls", NULL);exit(2);}if(waitpid(pid) < 0)printf("wait error\n");pid = fork();if(pid==0){fd=open("otc/otc.c", O_RDONLY);close(fd);}if(waitpid(pid)<0)printf("wait error\n");return 0;}

這個程式定義了一個執行內容。進程的上下文由PSW,寄存器,記憶體和檔案中儲存的值組成。而進程管理的特徵存放在一個單獨的資料結構:進程描述符 中

進程描述符

進程描述符:task_struct,核心採用迴圈雙向鏈表task_list來採用存放所有進程描述符,並藉助全域變數current來存放當前運行進程的task_struct的引用

以下是進程描述符必須記錄的資訊:

進程的屬性,進程間的關係,進程的記憶體空間,檔案管理,訊號管理,進程的信任狀,資源限制,與調度相關的欄位

與進程屬性相關的欄位1. state,用於記錄進程的狀態,在其執行生命週期內,其可能的值:TASK_RUNNING,TASK_INTERRUPTIBLE,TASK_UNINTERRUPTIBLE,TASK_ZOMBLE,TASK_STOPPED,TASK_DEAD2. pid,每個進程都有一個唯一的進程標識符,類型為pid_t,其實為短整型3. 標誌,定義的是進程的特殊屬性4. binfmt,exit_code等與調度相關的欄位多個進程共用一個CPU,發送器為每個進程分配一個時間片和優先順序來實現公平,高效的調度。時間片定義了一個進程被切換掉,運行另一個進程之前二允許啟動並執行時間長度。進程的優先順序則是一個數值,它定義了相對其他就緒進程而言,進程被允許執行的相對順序。prio,static_prio(nice值)run_list:準備啟動並執行進程隊列,policy等等進程間相互關係的欄位每一個進程都有一個建立它的父進程p,而p也可能有兄弟進程1. real_parent,指向當前進程的父進程的進程描述符2.parent:指向其父進程描述符的指標3.children:指向當前進程 的子進程列表的struct4.sibling:指向當ianjincheng的兄弟進程列表的struct5.greoup_leader:每個進程組的組長的類型與進程信任狀相關的欄位1.uid和gid:uid存放建立改進成的使用者的ID,gid是該進程所在進程組的組ID2. euid和egid suid和sgid 等與檔案系統及地址空間相關的欄位進程總是通過執行開啟,關閉,讀,寫檔案按這樣的任務與檔案密切相關;fs 欄位儲存一個指向檔案系統資訊的指標files 儲存一個指向進程的檔案描述符表的指標                                 mm 指向與地址空間及記憶體管理相關的資訊進程的建立:系統調用fork(),vfork,clone()fork函數fork函數返回2次,一次是在父進程,一次是在子進程,如果在子進程中返回,將返回0,如果在父進程中返回,將返回子進程的PID。當fork函數調用時,該函數把包括該系統調用表索引表在內的一些必要資訊放入適當的寄存器,系統調用表中存放系統調用的指標有處理器來決定將這些資訊放入哪個寄存器中fork函數調用的是do_fork函數vfork函數vfork的父進程已知阻塞,知道子進程調用exit()或exec()為止clone函數把一個指向函數的指標和該函數的參數作為自己的參數進程的生命週期進程所處的第一個狀態是TASK_INTERRUPTIBLE,這是在由do_fork()調用的copy_process()曆程中建立進程時設定的,進程的第二個狀態是TASK_RUNNING,這是在退出do_fork之前的設定的,最後一個狀態是TASK_ZOMBIE,這是在do_exit期間被設定的就緒態 -> 運行態    被發送器選中運行態 -> 就緒態    時間片用完,進程讓出CPU阻塞態 ->  就緒態   訊號到來,或等待的資源變為可用的運行態 -> 就緒態    進程睡眠或等待事件進程的終止主動終止進程:從main函數返回,調用exit被動終止進程:進程可能收到自己不能處理的一個訊號當今成在核心態執行時可能產生一個異常進程可能和搜到了SIGABRT訊號或其他終止訊號當子進程先於父進程終止,則子進程編程一個殭屍進程,直到父進程調用wait或waitpid為止當子進程在父進程之後終止,則該子進程將成為孤兒進程,知道init進程收養該子進程wait函數的作用:獲知進程消亡的資訊,消除進程的所有痕迹

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.