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

首頁 > 系統 > Unix > 正文

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

2024-06-28 13:24:48
字體:
來源:轉載
供稿:網友
《Unix環境高級編程》讀書筆記 第7章-進程環境1. main函數
  • int main( int argc, char *argv[] );
  • argc是命令行參數的數目,包括程序名在內
  • argv是指向參數的各個指針所構成的數組,即指針數組
  • 當內核執行C程序時(使用exec函數),在調用main前先調用一個特殊的啟動例程。可執行程序文件將此啟動例程指定為程序的起始地址——這是由連接器設置的,而連接器則是由C編譯器調用。啟動例程從內核取得命令行參數和環境變量值,然后按上述方式調用main函數做好安排。
2. 進程終止
  • 有8種方式使進程終止,其中5種為正常終止
    1. 從main返回
    2. 調用exit
    3. 調用_exit或_Exit
    4. 最后一個線程從其啟動例程返回
    5. 從最后一個線程調用pthread_exit
  • 異常終止有3種方式:
    1. 調用abort
    2. 接到一個信號
    3. 最后一個線程對取消請求做出響應
2.1 退出函數
  1. #include <stdlib.h>
  2. void exit(int status);
  3. void _Exit(int status);
  4. #include <unistd.h>
  5. void _exit(int status);
  • _exit(由POSIX.1說明)和_Exit(由ISO C說明)立即進入內核,而exit(由ISO C說明)則先執行一些清理處理,然后返回內核。
  • 3個退出函數都帶一個整型參數,稱為終止狀態退出狀態。大多數Unix系統shell都提供檢測進程終止狀態的方法。
  • 下面幾種情況下,該進程的終止狀態是未定義的:
    1. 調用這些函數時不帶終止狀態
    2. main執行了一個無返回值的return語句
    3. main沒有聲明返回類型為整型
2.2 函數atexit
  1. #include <stdlib.h>
  2. int atexit(void (*func)(void)); // 參數是一個函數指針
  3. Returns: 0 if OK, nonzero on error
  • 按照ISO C的規定,一個進程可以登記多至32個函數,這些函數將由exit自動調用。稱這些函數為終止處理程序
  • exit首先調用各終止處理程序,然后關閉所有打開流。exit調用這些函數的順序與它們登記的順序相反。
  • 如若程序調用exec函數,則將清除所有已安裝的終止處理程序。
  • 注意:內核使程序執行的唯一方法是調用一個exec函數。進程自愿終止的唯一方法是顯式或隱式(通過調用exit)地調用_exit或_Exit。進程也可非自愿地由一個信號使其終止。

  • 一個C程序的啟動,以及它的各種終止方式

3. 命令行參數
  • 當執行一個程序時,調用exec的進程可將命令行參數傳遞給新程序。這是Unix shell的一部分常規操作。
4. 環境表
  • extern char **environ;稱environ為環境指針;指針數組為環境表,其中各指針指向的字符串為環境字符串
5. C 程序的存儲空間布局
  • 歷史沿襲至今,C程序一直由以下幾部分組成:

    1. 正文段。這是由CPU執行的機器指令部分。通常,正文段是可由多個應用程序共享的,在存儲器中只需一個副本。正文段常常是只讀的。
    2. 初始化數據段,也稱為數據段。包含了程序中需明確地賦初值的變量。
    3. 未初始化數據段,也稱為bss段(block started by symbol,由符號開始的塊)。在程序開始執行之前,內核將此段中的數據初始化為0或空指針。
    4. 棧。自動變量以及每次函數調用時所需保存的信息都存放在此段中。
    5. 堆。通常在堆中進行動態存儲分配。慣例,堆位于未初始化數據段和棧之間。
  • 一種典型安排方式,這是程序的邏輯布局

  • size命令報告正文段、數據段和bss段的長度(以字節為單位)

    $ size /usr/bin/cc /bin/shtext data bss dec hex filename346919 3576 6680 357175 57337 /usr/bin/cc102134 1776 11272 115182 1c1ee /bin/sh第4、5列分別是以十進制和十六進制表示的3段總長度

6. 共享庫
  • 共享庫使得可執行文件中不再需要包含公用的庫函數,而只需要在所有進程都可以引用的存儲區中保存這種庫例程的一個副本。減少了每個可執行文件的長度,但增加了一些運行時間開銷。這種時間開銷發生在該程序第一次被執行時,或者每個共享函數庫函數第一次被調用時。
  • 另一個優點是可以用庫函數的新版本代替老版本而無需對使用該庫的程序重新連接編譯。
7. 存儲空間分配
  • ISO C說明了3個用于存儲空間動態分配的函數

    malloc,初始值不確定calloc,每一位都初始化為0realloc,新增區域內的初始值不確定

  1. #include <stdlib.h>
  2. void *malloc(size_t size);
  3. void *calloc(size_t nobj, size_t size);
  4. void *realloc(void *ptr, size_t newsize);
  5. All three return: non-null pointer if OK, NULL on error
  6. void free(void *ptr);
  • 這3個分配函數所返回的指針一定是適當對齊的,滿足最苛刻的對齊要求,使其可用于任何數據對象。
  • 返回通用指針void *
  • 這些分配例程通常用sbrk系統調用實現。該系統調用擴充或縮小進程的堆。雖然sbrk可以擴充或縮小進程的存儲空間,但是大多數malloc和free的實現都不減少進程的存儲空間。釋放的空間可供以后再分配,將它們保持在malloc池中而不返回給內核。
  • 大多數實現所分配的存儲空間比所要求的要稍大一些,額外的空間用來記錄管理信息——分配塊的長度、指向下一個分配塊的指針等。
  • 常見錯誤:1. 釋放一個已經釋放了的塊;2. 調用free時所用的指針不是3個alloc函數的返回值;3. 忘記調用free造成內存泄露。
8. 替代的存儲空間分配程序
  • libmalloc
  • vmalloc
  • quick-fit,歷史上所使用的標準malloc算法是最佳適配或首次適配存儲分配策略。quick-fit算法比上述兩種快,但可能使用較多存儲空間
  • jemalloc
  • TCMalloc,高性能、高擴展性和高存儲效率。開源,是Google-perftools工具中的一個
  • 函數alloca,在當前函數的棧幀上分配存儲空間,而不是在堆上。

    優點:當函數返回時,自動釋放它所使用的棧幀,不再需要自己釋放空間缺點:alloca函數增加了棧幀的長度,而某些系統在函數已經被調用后不能增加棧幀長度,于是也就不能支持alloca函數。本書4個平臺均支持該函數。

9. 環境變量
  • Unix內核并不查看這些字符串,它們的解釋完全取決于各個應用程序。
  • LANG、PATH、HOME、PWD、TERM ...
  1. #include <stdlib.h>
  2. char *getenv(const char *name);
  3. Returns: pointer to value associated with name, NULL if not found
  1. #include <stdlib.h>
  2. int putenv(char *str); // name已存在,替換
  3. Returns: 0 if OK, nonzero on error
  4. int setenv(const char *name, const char *value, int rewrite); // 當name已存在時,根據rewrite參數而覆蓋或保持原值
  5. int unsetenv(const char *name); // 即使name不存在也不算出錯
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美视频在线观看免费网址| 国产精品啪视频| 国产精品igao视频| 国产精品久久久久久影视| 精品国产乱码久久久久久婷婷| 日韩欧美中文在线| 米奇精品一区二区三区在线观看| 亚洲大胆美女视频| 亚洲欧洲激情在线| 国产成人精品免高潮在线观看| 欧美日韩免费在线观看| 国产精品无av码在线观看| 国产亚洲精品美女| 欧美野外猛男的大粗鳮| 欧美极度另类性三渗透| 国产视频精品va久久久久久| 欧美夜福利tv在线| 国产精品久久久久久久久免费看| 超碰91人人草人人干| 成人国产精品免费视频| 国产成人综合精品在线| 日本精品久久久久久久| 亚洲美女视频网站| 久久精品成人欧美大片| 亚洲毛茸茸少妇高潮呻吟| 久久久女女女女999久久| 欧美精品久久久久久久久| 欧美视频在线观看 亚洲欧| 91精品国产高清久久久久久久久| 久久久久久久久久久久久久久久久久av| 国产欧美一区二区| 伊人一区二区三区久久精品| 热久久美女精品天天吊色| 欧美在线观看网址综合| 精品国偷自产在线| 日韩影视在线观看| 亚洲精品久久久久久久久久久久久| 亚洲最大成人在线| 日韩高清电影免费观看完整版| 黑人巨大精品欧美一区二区一视频| 亚洲成人教育av| 欧美一级黑人aaaaaaa做受| 欧洲日本亚洲国产区| 国产成人在线一区| 欧美大片在线影院| 国产成人自拍视频在线观看| yellow中文字幕久久| 国产99视频精品免视看7| 国产一区二区三区直播精品电影| 少妇激情综合网| 欧美日韩国产丝袜另类| 国产精品丝袜久久久久久不卡| 国产精品嫩草影院久久久| 精品国产欧美一区二区五十路| 国产中文日韩欧美| 国产女人18毛片水18精品| 国产亚洲在线播放| 精品丝袜一区二区三区| 国产在线视频一区| 中文字幕在线看视频国产欧美在线看完整| 日韩高清免费在线| 亚洲一区第一页| 国产成人精品在线| 这里只有精品久久| 97国产精品人人爽人人做| 亚洲色图综合久久| 97激碰免费视频| 亚洲一区二区黄| 97精品一区二区视频在线观看| 国产精品丝袜一区二区三区| 欧美电影免费看| 91精品久久久久久| 日韩在线视频观看| 亚洲xxxxx电影| 日韩视频免费大全中文字幕| 亚洲欧美一区二区三区在线| 欧美黄色片免费观看| 亚洲综合小说区| 精品国产欧美成人夜夜嗨| 欧美最顶级丰满的aⅴ艳星| 日韩av电影在线播放| 国产中文字幕亚洲| 国产精品精品久久久久久| 亚洲国产天堂久久综合网| 国产精品天天狠天天看| 国产精品爱啪在线线免费观看| 久久视频精品在线| 成人精品久久一区二区三区| 国产欧美最新羞羞视频在线观看| 亚洲视频电影图片偷拍一区| 亚洲影院在线看| 国产福利精品av综合导导航| 色综合天天综合网国产成人网| 欧美—级高清免费播放| 国产乱肥老妇国产一区二| 久久久91精品国产| 日韩在线资源网| 亚洲精品美女免费| 亚洲成人精品视频在线观看| 国模叶桐国产精品一区| 欧美在线免费视频| 欧美激情a在线| 久久99青青精品免费观看| 成人免费在线视频网站| 亚洲女人被黑人巨大进入| 国产一区视频在线| 国产日韩欧美在线视频观看| 一本一本久久a久久精品牛牛影视| 在线看日韩欧美| 欧美国产高跟鞋裸体秀xxxhd| 国产精品高潮呻吟久久av无限| 91精品久久久久久久久久久久久久| 九九视频直播综合网| 中国人与牲禽动交精品| xvideos成人免费中文版| 亚洲护士老师的毛茸茸最新章节| 亚洲激情第一页| 欧美视频精品一区| 一区二区亚洲精品国产| 不卡av日日日| 最近2019中文字幕在线高清| 日韩精品视频观看| 国产精品久久久久久久美男| 亚洲一区二区三区毛片| 国产精品入口免费视频一| 欧美日韩免费看| 最近中文字幕2019免费| 日韩精品视频观看| 亚洲欧美中文日韩v在线观看| 欧美日韩日本国产| 国产免费一区二区三区香蕉精| 青青久久av北条麻妃海外网| 亚洲人午夜精品免费| 日本精品久久中文字幕佐佐木| 国模精品系列视频| 国产一区二区三区直播精品电影| 亚洲国产美女精品久久久久∴| 久久久精品美女| 国产97在线视频| 久久久久久久av| 91国产精品91| 色午夜这里只有精品| 中文字幕欧美精品日韩中文字幕| 日韩在线观看免费高清完整版| 日韩在线观看免费全集电视剧网站| 大伊人狠狠躁夜夜躁av一区| 91久久精品国产91久久性色| 日韩激情视频在线| 亚洲qvod图片区电影| 亚洲福利精品在线| 久久久久久久一| 亚洲第一福利网| 日本精品中文字幕| 国产91在线播放精品91| 成人av在线网址| 国产精品成人国产乱一区| 日本一区二区在线播放| 欧美电影免费观看| 日韩中文字幕视频| 久久精品视频在线播放| 午夜精品一区二区三区在线播放| 国产精品丝袜久久久久久高清| 欧美日韩免费一区| 欧美成人激情在线|