論‘進程’相關操做

★進程相關概念程序員

        (1)進程:是一個可以分配處理器並由處理器執行的,可以攜帶資源的活動實體。ide

        (2)進程控制塊(PCB):每個進程中都有惟一的一個進程控制塊來保存進程的相關信息,實際PCB就是一個task_struct的結構體。具體的見http://10740590.blog.51cto.com/10730590/1785457函數

        (3)進程狀態:進程是一個活動實體,並不表明進程是一直處於運行狀態,一個進程能夠有不少種狀態。spa

            △R(running)表示運行狀態.net

             △S(sleeping)表示可喚醒睡眠狀態線程

             △D(disk sleep)表示不可喚醒的睡眠狀態3d

             △T(stopped)表示暫停狀態blog

             △t(tracing stop)表示終止狀態生命週期

             △X(dead)表示死亡狀態進程

             △Z(zombie)表示殭屍狀態


★進程建立執行

        進程的建立有兩種方法:fork()和execve()。二者都是建立的進程都是運行進程的子進程,建立後的子進程會獲得父進程中的數據段、棧段、堆區域的一份拷貝,這些子進程都是能夠對其進行更改的,可是文本段是二者共享的,不能被子進程進行修改。


      下面是fork的使用方法:

wKiom1eVgOjA0MHWAAB1SP7g2ro560.png


        運行結果:

wKiom1eVganyzrMKAAAR-BtYeMg291.png


★進程終止

      進程終止有如下幾種方式:

             (1)從main函數返回

              (2)調用exit函數

              (3)調用_exit或_Exit;

              (4)最後一個線程從啓動例程返回

              (5)最後一個線程調用pthread_exit;

              (6)調用abort函數

              (7)接到一個信號並終止

              (8)最後一個線程對取消請求作出相應


      前5種爲正常終止,後三種爲異常終止。從main函數中return退出爲進程退出,由於沒有在繼續執行的代碼,可是在程序中間的任何位置return,不算是進程退出,只能算是程序調用結束。

      exit返回:

                 exit()還讓return系統會強制刷新緩衝區,文件描述符

                _exit()強制直接結束,不須要管其他的東西

                _Exit()和_exit是相同的 


★exit函數與atexit函數

(1)exit、atexit函數定義

       頭文件:#include <stdlib.h>                  頭文件:#include <stdlib.h>

                     void exit(int status);                                int atexit(void (*fun)(void));


     一個進程能夠登記若干個函數,這些函數由exit自動調用,這些函數被稱爲終止處理函數,atexit函數就能夠登記這些函數。exit調用終止處理函數的順序和atexit登記的順序是相反的,若是一個函數能夠被屢次的登記,也能夠被屢次的調用。

    

wKioL1eVjNeyY5DEAABjm3-k2jg697.png

     運行結果:

wKioL1eVjWKAk_mcAAAryMshYj8146.png


★棧幀

1.堆棧

      堆棧是C語言以及其餘語言運行時必須使用的一塊空間,它的主要做用是函數調用、傳遞參數、保存返回地址、提供局部變量空間的。

      ①堆須要程序員本身申請,而且須要顯示的進行釋放,申請和釋放必須是成對出現的,要否則就會出現內存泄漏,由於堆上的空間生命週期都是一直存在,直到手動進行釋放。而棧是系統自動進行分配的,回收也是進程運行結束時系統自動回收。

      ②堆的空間較大,棧的空間小,通常申請大的內存都在堆上。


2.棧幀的詳細解釋:http://blog.csdn.net/yxysdcl/article/details/5569351

相關文章
相關標籤/搜索