應用_進程線程

進程線程html


1.進程:數組

 

         孤兒進程,守護進程,殭屍進程緩存

 

   函數:fork ,wait,waitpid,網絡

 

 

 

  進程間通信(IPC)多線程

  1. 種類:無名管道,有名管道,信號通信  併發

            消息隊列,共享內存,信號量燈      異步

             socketsocket

 

 

  2.目的:實現數據共享函數

  3.  測試

 


  無名管道:內核在物理空間開闢的一段共享緩存,無文件名只用於親緣之間;

     函數:int pipe( int pipefd[2] ) :數組存放讀寫文件描述符

 

 

 

     特色:

     代碼示例:http://www.javashuo.com/article/p-xvojjtwl-hg.html


  有名管道:內核在物理空間開闢的一段共享緩存,已文件形式操做緩存;

    函數:int mkfifo(const char *pathname, mode_t mode) 建立只須要一個進程,另外一個進程直接讀寫

 

 

 

 

     特色:

     代碼示例:http://www.javashuo.com/article/p-btultepa-hh.html


 

  信號通信

     

 

     信號處理方式:默認,自定義,忽略

 

 

     特色:惟一異步通訊的IPC


 

  消息隊列:內核在物理空間建立用於存放消息的雙向循環鏈表;

     函數:msgget    :建立獲取標識符

        msgsend :經過標識符發送編號內容

        msgrcv    :經過標識符接收編號內容

        msgctl     :經過標識符刪除消息隊列

 

 

    特色:

    代碼示例:http://www.javashuo.com/article/p-sgfadpax-hm.html


  共享內存:內核在物理空間開闢一大段緩存空間,直接使用地址共享讀寫,實現通訊;

     函數:shmget :建立獲取共享內存

           shmat  : 掛載(映射創建)

        shmdt  : 卸載(映射取消)

        shmctl  :刪除共享內存

 

     特色:

     代碼示例:http://www.javashuo.com/article/p-gpthaggc-hn.html


  信號量燈:多進程線程共享操做,經過加鎖機制資源保護,實現同步與互斥,防止干擾;

     函數:semget :建立獲取信號量集合

        semctl  :設置初始值

           semop : P V 操做 

           semctl : 刪除信號量集合

 

 

    特色: 

    代碼示例:http://www.javashuo.com/article/p-dxaqguza-ho.html


  socket:

 

 

 

 

 

 

     特色:

     代碼示例:


2.線程:輕量級進程,CPU調度的最小單位

    函數:pthread_creat 註冊線程函數,實現併發運行

       pthread_dtach/self 線程分離,自動回收

       pthread_cannel/exit  粗暴主動,終止線程

       pthread_join      回收資源(阻塞等待次線程回收)

       pthread_cleanup_push/pop 線程退出函數(壓棧彈棧必須成對)

 

     鎖:  

       互斥鎖初始化方式:靜態宏, 動態函數

        1. 靜態宏的設置:

           快速靜態鎖:普通鎖,在嵌套鎖時會出現死鎖

            pthread_mutex_t fastmutex = PTHREAD_MUTEX_INITIALIZER

           遞歸鎖:能夠嵌套上鎖

            pthread_mutex_t recmutex = PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP

           檢錯鎖:在出現嵌套鎖時返回一個錯誤信息,不會死鎖

            pthread_mutex_t errchkmutex = PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP

 

           2.   動態函數設置:

               int pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutexattr_t *mutexattr)

               參一爲初始化的鎖名稱

            參二爲鎖的屬性,對應快速鎖,嵌套鎖,檢錯鎖。

 

      鎖的操做:加鎖、解鎖、測試加鎖、銷燬鎖

        1.加鎖:無論是哪一種類型的鎖,都不可能被兩個線程

            int pthread_mutex_lock(pthread_mutex_t *mutex)

        2.解鎖:對於快速鎖,則解除鎖定。對於嵌套鎖使鎖上的技術減一,表示上了兩層。

            對於檢錯鎖,若是鎖是本線程加的,則解除鎖,不然啥也不幹

            int pthread_mutex_unlock(pthread_mutex_t *mutex)

        3.測試:使用測試加鎖,則不會掛起阻塞。

             int pthread_mutex_trylock(pthread_mutex_t *mutex) 

        4.銷燬: 銷燬鎖,意味着釋放所佔用的資源,並且要求鎖處於開放狀態。

             int pthread_mutex_destroy(pthread_mutex_t *mutex)

          

 

     特色:

     代碼示例:http://www.javashuo.com/article/p-xnuktoss-hp.html

<筆記>

1.進程內部多線程通信實現數據共享,使用全局變量便可,開銷小

2.


 

 

命令: 

top:Linux的任務管理器·

PS :靜態的進程統計信息

a:顯示當前終端下的全部進程信息,包括其餘用戶的進程。
u:使用以用戶爲主的格式輸出進程信息。
x:顯示當前用戶在全部終端下的進程。
-e:顯示系統內的全部進程信息。
-l:使用長(long)格式顯示進程信息。
-f:使用完整的(full)格式顯示進程信息。

 

ps  aux    (簡單列表的形式顯示出進程信息):

USER  :進程用戶名
PID   :進程的ID
PPID  :父進程ID
%CPU  :進程佔用的CPU百分比
%MEM :進程佔用內存的百分比
NI   :進程的NICE值,數值大,表示較少佔用CPU時間;
VSZ  :進程使用的虛擬內存量(KB);
RSS   :進程佔用的固定內存量(KB)(駐留中頁的數量);
TTY  :進程在哪一個終端上運行(登陸者的終端位置),若與終端無關,顯示(?)。若pts/0,表示網絡鏈接主機進程
WCHAN: 當前進程程是否正在運行,若爲-表示正在運行;
START :進程被觸發啓動時間;
TIME : 進程實際使用CPU運行的時間;
COMMAND:命令的名稱和參數;

 STAT:

  D 沒法中斷的休眠狀態(一般 IO 的進程);
  R 正在運行可中在隊列中可過行的;
  S 處於休眠狀態;
  T 中止或被追蹤;
  W 進入內存交換 (從內核2.6開始無效);
  X 死掉的進程 (基本不多見);
  Z 殭屍進程;
  < 優先級高的進程
  N 優先級較低的進程
  L 有些頁被鎖進內存;
  s 進程的領導者(在它之下有子進程);
  l 多進程的(使用 CLONE_THREAD, 相似 NPTL pthreads);
  + 位於後臺的進程組;

 

進程有5種狀態:
  1. 運行(正在運行或在運行隊列中等待)
  2. 中斷(休眠中, 受阻, 在等待某個條件的造成或接受到信號)
  3. 不可中斷(收到信號不喚醒和不可運行, 進程必須等待直到有中斷髮生)
  4. 僵死(進程已終止, 但進程描述符存在, 直到父進程調用wait4()系統調用後釋放)
  5. 中止(進程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信號後中止運行運行)






kill 進程號(殺死進程)  kill  -9  pid   強制終止進程

 

kill -l :(Linux信號列表)

1 ~ 31的信號爲傳統UNIX支持的信號,是不可靠信號(非實時的)

32 ~ 63的信號是後來擴充的,稱作可靠信號(實時信號)

區別:不可靠信號不支持排隊,可能會形成信號丟失

   而可靠信號支持排隊,不會形成信號丟失 

 

 

 

消息隊列 / 共享內存 / 信號量:

查看 :ipcs  -q / -m / -s   刪除:ipcrm  -q / -m / -s    [-mid] 

 

 

key:key shmid:編號 owner:建立用戶 perms:權限 bytes:大小 nattch:鏈接共享內存的進程數

status:共享內存的狀態

 

 

 

 

 


<筆記>

1. 程序運行在磁盤,不佔系統資源

 進程運行在內存,佔用系統資源

2. fork以前的代碼,父子進程都擁有

3. 進程就是主線程

4. 管道是半雙工通訊

5. 進程線程應用:

   多進程:執行新程序

   多線程:執行多任務

6. wait 和 waitpid 區別 :

 

7. 

相關文章
相關標籤/搜索