Linux系統編程_6_進程環境(C程序典型的存儲空間)
1.八種結束Linux進程的方法:
五種正常終止方式:
main函數返回;
調用exit;
調用_exit或_Exit
最後一個線程從其啟動例程返回
最後一個線程調用pthread_exit
三種異常終止方式:
調用abort。
接收到一個信號終止;
最後一個線程對取消請求做出響應。
exit函數與_exit _Exit函數的差別是exit函數在結束進程之前會調用各種終止處理程序,關閉全部IO流,這會造成全部緩沖中的數據被沖洗(寫到磁盤文件);
atexit(void (*fun)void)函數,用來給進程註冊函數。退出時會運行註冊過的函數。註冊幾次會調用幾次。
2.命令行參數與環境表:
extern char **environ; //每一個程序都會有一張環境表,與參數表一樣,環境表也是一個字符指針數組,當中每一個指針以NULL(\0)結束;
全局變量environ指向了該環境表的首地址;
#include <stdio.h> int main(int argc, char **argv, char **env) { int i; printf("================Argv Pram===================\n"); for(i=0; i<argc; i++) { printf("argc[%d]= %s\n", i, argv[i]); } printf("\n=============Environment Pram==============\n"); for(; *env != NULL; env++) { printf("%s\n", *env); } return 0; }
運行結果:
================Argv Pram===================
argc[0]= ./main
=============Environment Pram==============
HOSTNAME=150
SELINUX_ROLE_REQUESTED=
TERM=xterm
SHELL=/bin/bash
HISTSIZE=1000
SSH_CLIENT=192.168.0.88 12069 22
(......)
3. C程序典型的存儲空間
C程序典型的存儲空間例如以下:
對於X86處理器的Linux上,正文段從0x08048000單元開始,棧底則在0xc0000000之下開始。堆頂和棧底之間未使用的空間非常大。
註意:未初始化的bss段並不存放在磁盤上的程序文件裏,原因是內核在程序開始執行前都將它們設置為0,須要存放在程序文件裏的段僅僅有正文段和初始化數據段。
Linux系統編程_6_進程環境(C程序典型的存儲空間)