日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > linux >内容正文

linux

Linux进程环境

發(fā)布時間:2023/12/1 linux 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux进程环境 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一 main函數(shù)

當(dāng)內(nèi)核使用一個exec函數(shù)執(zhí)行C程序時,在調(diào)用main函數(shù)之前先調(diào)用一個特殊的啟動例程,可執(zhí)行程序?qū)⒋死讨付槌绦虻钠鹗嫉刂贰永虖膬?nèi)核獲取命令行參數(shù)和環(huán)境變量,然后為調(diào)用main函數(shù)做好準(zhǔn)備。

二 進(jìn)程終止
進(jìn)程終止的方式有8種,前5種為正常終止,后三種為異常終止:
1 從main函數(shù)返回;
2 調(diào)用exit函數(shù);
3 調(diào)用_exit或_Exit;
4 最后一個線程從啟動例程返回;
5 最后一個線程調(diào)用pthread_exit;
6 調(diào)用abort函數(shù);
7 接到一個信號并終止;
8 最后一個線程對取消請求做出響應(yīng)。
(1)exit函數(shù)
#include <stdlib.h>
void exit( int status );
void _Exit( int status );
#include <unistd.h>
void _exit( int status );
這三個函數(shù)用于正常終止一個程序,_exit和_Exit立即進(jìn)入內(nèi)核,而exit則要先做一些清理工作(調(diào)用執(zhí)行各終止處理程序,關(guān)閉所有標(biāo)準(zhǔn)I/O流),再進(jìn)入內(nèi)核。三個函數(shù)所帶的整型參數(shù)稱為終止?fàn)顟B(tài)或退出狀態(tài),如果(a)調(diào)用這些函數(shù)不帶參數(shù),(b)main函數(shù)中的return語句無返回值,(c)main函數(shù)沒有聲明返回類型為整型,則進(jìn)程的終止?fàn)顟B(tài)是未定義的。main函數(shù)返回一個整型值與用該值調(diào)用exit是等價的。
(2)atexit函數(shù)
#include <stdlib.h>
int atexit( void (*fun)( void ) );
一個進(jìn)程可以登記32個函數(shù),這些函數(shù)由exit自動調(diào)用,這些函數(shù)被稱為終止處理函數(shù),atexit函數(shù)可以登記這些函數(shù)。exit調(diào)用終止處理函數(shù)的順序和atexit登記的順序相反,如果一個函數(shù)被多次登記,也會被多次調(diào)用。

三 環(huán)境表
每個程序都會收到一張環(huán)境表,環(huán)境表是一個字符指針數(shù)組,每個指針指向一個以NULL結(jié)尾的環(huán)境字符串,環(huán)境指針environ是一個全局變量,指向指針數(shù)組的地址。通常用getenv和putenv函數(shù)來訪問特定的環(huán)境變量,而不是environ全局變量。如果要查看整個環(huán)境,則必須用environ全局變量。

四 C程序的存儲空間布局
1 正文段
CUP執(zhí)行的機器指令部分,是共享和只讀的。
2 初始化數(shù)據(jù)段
又稱作數(shù)據(jù)段,包含了程序中明確需要賦初值的變量。
3 非初始化數(shù)據(jù)段
在程序開始執(zhí)行前,內(nèi)核將此段中的數(shù)據(jù)初始化為0或空指針。
4 棧
自動變量以及每次函數(shù)調(diào)用時所需保存的數(shù)據(jù)都存放在此段中。
5 堆
用于動態(tài)存儲分配。堆位于棧和非初始化數(shù)據(jù)段之間。

五 存儲器分配
#include <stdlib.h>
void *malloc( size_t size );
void *calloc( size_t nobj, size_t size );
void *realloc( void *ptr, size_t newsize );
void free( void *ptr );
malloc函數(shù)分配指定字節(jié)數(shù)的存儲區(qū),該存儲區(qū)中的初始值不確定;calloc函數(shù)為指定數(shù)量且指定長度的對象分配存儲空間,該空間中的每一位都初始化為0;realloc函數(shù)更改存儲區(qū)的長度(增加或減少),新增區(qū)域內(nèi)的初始值不確定,如果ptr為空,realloc和malloc的功能相同。
以上函數(shù)的大多數(shù)實現(xiàn)所分配的存儲空間都比所要求的大一些,額外的空間用來存儲管理信息。如果在一個超過已分配區(qū)的尾端進(jìn)行寫操作,就會重寫下一個分配區(qū)的管理記錄;同樣,在一個已分配區(qū)的起始位置之前寫入,會重寫本分配區(qū)的管理記錄。這種錯誤是災(zāi)難性的,但因為不會很快暴露出來,所以很難發(fā)現(xiàn)。

六 環(huán)境變量
環(huán)境字符串的形式如:name=value,它們的解釋完全取決于各個應(yīng)用程序,而與內(nèi)核無關(guān)。
#include <stdlib.h>
char *getenv( const char *name );
int putenv( char *str );
int setenv( const char *name, const char *value, int rewrite );
int unsetenv( const char *name );
getenv函數(shù)返回指向name=value中的value的指針;putenv函數(shù)把字符串name=value放入環(huán)境表中,如果name已經(jīng)存在,則先刪除原來的定義;setenv函數(shù)將name設(shè)置為value,如果name存在且rewrite非0,則刪除其現(xiàn)有定義,若rewrite為0,則不刪除其現(xiàn)有定義;unsetenv函數(shù)刪除name的定義,即使不存在也不會出錯。

七 setjmp和longjmp
#include <setjmp.h>
int setjmp( jmp_buf env );
void longjmp( jmp_buf env, int val );
setjmp和longjmp函數(shù)用于處理發(fā)生在深層次函數(shù)調(diào)用中的出錯情況,longjmp函數(shù)可以在棧上跳過若干個調(diào)用幀,返回到當(dāng)前函數(shù)調(diào)用路徑上的某個函數(shù)中。在希望返回到的位置調(diào)用setjmp,數(shù)據(jù)類型jmp_buf是某種形式的數(shù)組,存放在調(diào)用longjmp時能用來恢復(fù)棧狀態(tài)的所有信息。因為需要在另一函數(shù)中引用env變量,所以將env定義為全局變量。當(dāng)檢查到一個錯誤時,調(diào)用longjmp函數(shù),第一個參數(shù)env就是在調(diào)用setjmp時所用的env,第二個參數(shù)val非0,它將成為從setjmp處返回的值。使用第二個參數(shù)的原因是一個setjmp可以對應(yīng)多個longjmp,這樣就可以根據(jù)返回值來判斷造成返回的longjmp函數(shù)在那個函數(shù)中,從而確定出錯的位置。

八 getrlimit和setrlimit函數(shù)
#include <sys/resource.h>
int getrlimit( int resource, struct rlimit *rlptr );
int setrlimit( int resource, const struct rlimit *rlptr );
getrlimit和setrlimit函數(shù)用于獲取或設(shè)置進(jìn)程的資源限制。資源限制通常是由進(jìn)程0建立的,由每個后續(xù)進(jìn)程繼承。更改資源限制時,注意以下三條規(guī)則:
1 進(jìn)程的軟限制值只能小于或等于硬限制值;
2 任意進(jìn)程都可以降低其硬限制值,但它必須大于或等于其軟限制值,這種操作對普通用戶是不可逆的;
3 只有超級用戶進(jìn)程可以提高硬限制值。
資源限制影響到調(diào)用進(jìn)程并由其子進(jìn)程繼承,這意味著為了影響一個用戶的所有進(jìn)程,需要將資源限制構(gòu)造在shell中。

轉(zhuǎn)載于:https://www.cnblogs.com/mahy/archive/2012/01/04/2310988.html

總結(jié)

以上是生活随笔為你收集整理的Linux进程环境的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。