亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > Unix > 正文

《Unix環境高級編程》讀書筆記 第8章-進程控制

2024-06-28 13:24:24
字體:
來源:轉載
供稿:網友
《Unix環境高級編程》讀書筆記 第8章-進程控制 1. 進程標識
  • 進程ID標識符是唯一、可復用的。大多數Unix系統實現延遲復用算法,使得賦予新建進程的ID不同于最近終止所使用的ID
  • ID為0的進程通常是調度進程,也常被稱為交換進程。它是內核的一部分,是系統進程。
  • ID為1的進程通常是init進程,在自舉過程結束時由內核調用。該進程負責在內核自舉后啟動一個Unix系統,它決不會終止,是一個普通的用戶進程,但以超級用戶特權運行。
  • ID為2的進程是頁守護進程,負責支持虛擬存儲器系統的分頁操作。
#include <unistd.h>pid_t getpid(void); Returns: PRocess ID of calling processpid_t getppid(void); Returns: parent process ID of calling processuid_t getuid(void); Returns: real user ID of calling processuid_t geteuid(void); Returns: effective user ID of calling processgid_t getgid(void); Returns: real group ID of calling processgid_t getegid(void); Returns: effective group ID of calling process
  • 注意:這些函數都沒有出錯返回。
2. 函數fork
  • fork函數被調用一次,返回兩次。子進程中返回值是0,父進程中返回值是子進程的pid
  • 子進程是父進程的副本,子進程獲得父進程的數據空間、堆和棧的副本。注意,在是子進程擁有的副本。父子進程并不共享這些存儲空間部分。父子進程共享正文段。
  • 由于在fork之后經常跟隨著exec,所以現在的很多實現并不執行一個父進程數據段、堆和棧的完全副本。作為替代,使用了寫時復制技術。
  • 4種平臺都支持的變體:vfork;linux的變體:clone系統調用,允許調用者控制哪些部分由父子進程共享。
  • fork之后是父進程先執行還是子進程先執行是不確定的
  • 父進程中的所有打開文件描述符都被復制到子進程中,父子進程為每個相同的打開描述符共享一個文件表項,故共享同一文件偏移量。如果父子進程寫同一描述符執行的文件,又沒有任何形式的同步,那么它們的輸出就會混合。
  • 在fork之后處理文件描述符有以下兩種常見的情況:
    1. 父進程等待子進程完成。這種情況下,父進程無需對其描述符做任何處理。
    2. 父進程和子進程各自執行不同的程序段。這種情況下,fork之后,父子進程各自它們不需要使用的文件描述符。
  • strlen和sizeof的區別:前者不包括null字節,一次函數調用;后者包括null字節,編譯時計算

  • 除了文件描述符之外,父進程的很多其他屬性也由子進程繼承,包括:

    1. 實際用戶ID、實際組ID、有效用戶ID、有效組ID
    2. 附屬組ID
    3. 進程組ID
    4. 會話ID
    5. 控制終端
    6. SUID和SGID標志(stat結構的st_mode成員)
    7. 當前工作目錄
    8. 根目錄
    9. 文件模式創建屏蔽字umask
    10. 信號屏蔽和處理
    11. 對任一打開文件描述符的執行時關閉(close-on-exec)標志
    12. 環境
    13. 連接的共享存儲段
    14. 存儲映像
    15. 資源限制
    16. 是否繼承nice值由具體實現自行決定
  • 父進程和子進程之間的區別具體如下:

    1. fork的返回值不同
    2. pid不同
    3. 這兩個進程的父進程不同
    4. 子進程的tms_utime、tms_stime、tms_cutime和tms_ustime的值設置為0
    5. 子進程不繼承父進程設置的文件鎖
    6. 子進程的未處理鬧鐘被清除
    7. 子進程的未處理信號集設置為空集
  • fork失敗的兩個主要原因:

    1. 系統中已經有了太多的進程
    2. 該實際用戶ID的進程總數超過了系統限制
  • fork有以下兩種用法:

    1. 一個父進程希望復制自己,使父進程和子進程同時執行不同的代碼段。這在網絡服務器中是常見的。
    2. 一個進程要執行一個不同的程序。這對shell是常見的情況。某些系統將fork+exec組合成一個操作spawn
3. 函數vfork
  • vfork函數的調用序列和返回值與fork相同,但兩者的語義不同:
    1. vfork函數用于創建一個新進程,而該新進程的目的是exec一個新程序,故不將父進程的地址空間完全復制到子進程中,因為子進程會立即調用exec(或exit),于是也就不會引用該地址空間。不管在子進程調用exec或exit之前,它在父進程的空間中運行。
    2. 另一個區別是vfork保證子進程先運行,在它調用exec或exit之后父進程才可能被調度運行。故如果在調用這兩個函數之前子進程依賴于父進程的進一步動作,則會導致死鎖。
4. 函數exit
  • 5種正常終止方式:
    1. 從main中執行return,等效于調用exit
    2. 調用exit函數,調用各終止處理程序,關閉標準I/O流,最后調用_exit函數
    3. 調用_exit或_Exit
    4. 進程的最后一個線程在其啟動例程執行return語句,該進程以終止狀態0返回
    5. 進程的最后一個線程調用pthread_exit,進程終止狀態總是0
  • 3種異常終止方式:
    1. 調用abort,它產生SIGABRT信號
    2. 當進程接收到某些信號時,信號可由進程自身(如調用abort函數)、其他進程或內核產生
    3. 最后一個線程對“取消”請求做出響應
  • 不管進程如何終止,最后都會執行內核中的同一段代碼。這段代碼為相應的進程關閉所有打開描述符,釋放它所使用的存儲器等。
  • 注意:“退出狀態”(3個exit函數的參數或main的返回值)區別于“終止狀態”。在最后調用_exit時,內核將退出狀態轉換為終止狀態。

  • 如果父進程在子進程之前終止,則稱子進程為孤兒進程。子進程 ppid變為1,稱這些進程由init進程收養。一個init進程收養的進程終止時,init會調用一個wait函數取得其終止狀態,防止它成為僵尸進程。

  • 如果子進程在父進程之前終止,內核為每個終止子進程保存了一定量的信息,至少包括pid、該進程的終止狀態以及該進程使用的CPU時間總量。內核可以釋放終止進程所使用的所有存儲區,關閉其所有打開文件。在Unix術語中,一個已經終止、但其父進程尚未對其進行善后處理(獲取終止子進程的有關信息、釋放它仍占用的資源)的進程被稱為僵尸進程zombie/defunct。
5. 函數wait、waitpid
  • 當一個進程正?;虍惓=K止時,內核就向其父進程發送SIGCHLD信號。子進程終止是異步事件。
#include <sys/wait.h>pid_t wait(int *statloc);pid_t waitpid(pid_t pid, int *statloc, int options); Both return: process ID if OK, 0 (see later), or −1 on error
  • 調用wait或waitpid的進程可能:
    1. 如果其所有子進程都還在運行,則阻塞
    2. 如果一個子進程終止,正等待其父進程獲取其終止狀態,則取得該子進程的終止狀態立即返回
    3. 如果它沒有任何子進程,則立即出錯返回
  • 如果進程由于收到SIGCHLD信號而調用wait,我們期望wait會立即返回。
  • wait與waitpid的區別
    1. waitpid有一選項,可使調用者不阻塞
    2. waitpid可以控制它所等待的進程
  • 若statloc不是NULL,則終止進程的終止狀態就存放在它所指向的單元內。該整型狀態字由實現定義,其中某些位表示退出狀態(正常返回),其他位則指示信號編號(異常返回),有一位指示是否產生了core文件。

  • waitpid函數中的pid參數的解釋:

    pid == -1,等待任一子進程,等價于wait函數pid > 0,等待pid等于該值的子進程pid == 0,等待組ID等于調用進程組ID的任一子進程pid < 0,等待組ID等于pid絕對值的任一子進程

  • waitpid函數中的options參數:WNOHANG(不阻塞)、WCONTINUED、WUNTRACED

  • 如果一個進程fork一個子進程,但不要它等待子進程終止,也不希望子進程處于僵尸狀態直到父進程終止,實現這一要求的訣竅是調用fork兩次。

#include "apue.h"#include <sys/wait.h>int main(void){ pid_t pid; if ((pid = fork()) < 0) {        err_sys("fork error"); } else if (pid == 0) { /* first child */ if ((pid = fork()) < 0)            err_sys("fork error"); else if (pid > 0)            exit(0); /* parent from second fork == first child *//** We’re the second child; our parent becomes init as soon* as our real parent calls exit() in the statement above.* Here’s where we’d continue executing, knowing that when* we’re done, init will reap our status.*/    sleep(2);    printf("second child, parent pid = %ld/n", (long)getppid());    exit(0);

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久久久久久久久久国产| 日韩av在线免费观看一区| 在线国产精品视频| 91免费看片在线| 影音先锋欧美精品| 亚洲欧美色图片| 136fldh精品导航福利| 亚洲人成在线播放| 欧美视频免费在线| 欧美另类69精品久久久久9999| 久久精品中文字幕电影| 国产精品无av码在线观看| 久久视频在线视频| 欧美中在线观看| 国产精品91免费在线| 久久久久久亚洲精品中文字幕| 欧美午夜女人视频在线| 伊人久久大香线蕉av一区二区| 青青草原一区二区| 国产精品欧美一区二区三区奶水| 久久久久久久久网站| 欧美激情欧美狂野欧美精品| 一区二区欧美在线| 欧美日韩国产成人高清视频| 欧美性受xxxx黑人猛交| 国产亚洲精品高潮| 亚洲精品久久久久久久久久久久久| 亚洲国产精品人久久电影| 欧美日韩国产丝袜美女| 亚洲精品国产精品自产a区红杏吧| 欧美老女人在线视频| 中文字幕久精品免费视频| 国产精品免费一区豆花| 91免费视频网站| xxav国产精品美女主播| 亚洲a级在线观看| 久久精品视频在线播放| 亚洲91精品在线观看| 欧美成人免费全部观看天天性色| 欧美极品欧美精品欧美视频| 一本一本久久a久久精品牛牛影视| 国产91对白在线播放| 色偷偷亚洲男人天堂| 日韩av理论片| 97久久精品国产| 91精品视频免费| 日本欧美爱爱爱| 黄色一区二区在线观看| 亚洲激情免费观看| 91久久在线播放| 最近中文字幕mv在线一区二区三区四区| 亚洲欧美国内爽妇网| 亚洲精品一区二区网址| 亚洲97在线观看| 国产精品久久久久久久久久东京| 欧美一级淫片videoshd| 中文字幕在线视频日韩| 国内精品久久久久久久久| 欧美大奶子在线| 久久精品最新地址| 69av在线视频| 亚洲午夜国产成人av电影男同| 欧美人与性动交a欧美精品| 亚洲视频在线免费看| 在线播放国产一区二区三区| 国产成人高清激情视频在线观看| 亚洲一二三在线| 欧美黄网免费在线观看| 国产日韩换脸av一区在线观看| 亚洲天天在线日亚洲洲精| 亚洲午夜色婷婷在线| 国产精品久久久久77777| 亚洲国产精品国自产拍av秋霞| 国产xxx69麻豆国语对白| 91精品国产色综合久久不卡98口| 国产精品中文字幕在线| 国产97在线亚洲| 久久免费国产视频| 日韩av中文字幕在线播放| 国产精品96久久久久久又黄又硬| 欧美日韩美女视频| 在线看片第一页欧美| 92福利视频午夜1000合集在线观看| 狠狠色噜噜狠狠狠狠97| 九九热这里只有精品免费看| 亚洲成人网在线观看| 国产极品jizzhd欧美| 97视频在线看| 8090理伦午夜在线电影| 亚洲国产精品悠悠久久琪琪| 黑人巨大精品欧美一区二区免费| 国产综合在线看| 亚洲区免费影片| 91av免费观看91av精品在线| 国产免费一区视频观看免费| 疯狂蹂躏欧美一区二区精品| 日本精品性网站在线观看| 国产成人福利视频| 91久久久久久久久久久| 日韩av理论片| 日韩美女在线看| 欧美福利视频在线| 亚洲精品国产欧美| 亚洲欧美激情另类校园| 亚洲欧美国产制服动漫| 91精品国产自产在线| 黑人精品xxx一区| 精品久久在线播放| 日韩动漫免费观看电视剧高清| 国产成人精品网站| 欧美福利视频在线观看| 91精品国产99| 日韩经典一区二区三区| 中文字幕亚洲二区| 狠狠综合久久av一区二区小说| 国产免费观看久久黄| 精品国产一区二区三区四区在线观看| 成人在线激情视频| 国产婷婷成人久久av免费高清| 久久久免费观看视频| 国产精品成人aaaaa网站| 亚洲精品国产精品自产a区红杏吧| 精品国产一区二区三区四区在线观看| 欧美午夜片欧美片在线观看| 国产精品久久久久久亚洲调教| 性欧美长视频免费观看不卡| 成人www视频在线观看| 亚洲淫片在线视频| 国产精品第七影院| 2021久久精品国产99国产精品| 久久视频在线直播| 欧美精品久久久久久久久| 久久亚洲春色中文字幕| 欧美成年人视频网站| 久久久久久久久久久人体| 中文字幕av一区二区| 国产精品日日摸夜夜添夜夜av| 欧美精品精品精品精品免费| 九九九热精品免费视频观看网站| 亚洲国产成人精品女人久久久| 日韩激情在线视频| 毛片精品免费在线观看| 欧美性少妇18aaaa视频| 欧美中文在线视频| 俺去啦;欧美日韩| 亚洲片国产一区一级在线观看| 在线视频国产日韩| 久青草国产97香蕉在线视频| 黄色成人在线免费| 亚洲欧美精品伊人久久| 91精品国产高清| 久久人体大胆视频| 国产午夜精品久久久| 91sa在线看| 欧美—级a级欧美特级ar全黄| 欧美成在线观看| 久久久国产视频91| 日韩在线视频播放| 亚洲视频专区在线| 91久久精品国产91久久性色| 久久精品99无色码中文字幕| 色视频www在线播放国产成人| 午夜精品一区二区三区在线视| 日韩精品在线视频观看|