標籤:linux編程
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程式典型的儲存空間)