標題: UNIX下C語言編程--進程基本環(huán)境 [打印本頁]
作者: 51黑tt 時間: 2016-3-6 15:11
標題: UNIX下C語言編程--進程基本環(huán)境
2 進程通常由程序、數(shù)據(jù)和進程控制塊3個部分組成。程序部分描述了進程所要完成的功能;數(shù)據(jù)部分為進程提供了搜需的堆棧和私有數(shù)據(jù);進程控制塊含有進程的描述和控制信息。
2 進程和線程:一個進程可以擁有多個線程。線程沒有獨立的資源,它共享進程的ID,共享進程的資源。線程是UNIX中最小的調(diào)度單位。
2 前臺進程和后臺進程:用戶在Shell提示符下鍵入命令,創(chuàng)建進程,此后該進程接管終端,Shell中不能再輸入其他的命令,知道進程執(zhí)行完畢,才將終端控制權返回Shell并顯示用戶提示符。這樣的進程就是前臺進程。‚如果用戶再輸入Shell命令時,在命令串后加上“&”,shell將不等待進程執(zhí)行完畢就直接返回,于是就可以同事運行進程和執(zhí)行shell操作,這樣的進程就是后臺進程,后臺進程并不接管終端,所以必須是非交互式的。
2 守護進程:與終端無關,常駐后臺執(zhí)行的特殊進程。UNIX中最著名的兩個守護進程:sysproc進程,它是UNIX的第一個進程,標識號為0,能合理地調(diào)度系統(tǒng)中運行的進程,負責將進程從硬盤交換區(qū)調(diào)入內(nèi)如或者講進程從內(nèi)存調(diào)到硬盤交換區(qū)‚init進程,系統(tǒng)初始化進程,標識號1,是除sysproc外所有進程的祖先。
2 進程狀態(tài):運行態(tài):進程已經(jīng)分配到CPU,正在處理機上執(zhí)行時的狀態(tài)。同意時刻處于運行態(tài)的進程數(shù)不能大于CPU的數(shù)目。運行態(tài)可分為用戶態(tài)和核心態(tài)。如果進程正在運行用戶代碼,進程處于用戶態(tài)。如果進程出現(xiàn)系統(tǒng)調(diào)用或者系統(tǒng)中斷,運行操作系統(tǒng)內(nèi)部代碼,進程處于核心態(tài)。‚就緒態(tài):進程已具備運行條件,但其他進程正在用CPU,所以暫時不能運行而等待分配CPU的狀態(tài)。處于就緒態(tài)的進程一旦獲得了CPU就能立刻運行。ƒ睡眠態(tài):進程正在等待某種事件的發(fā)生而暫時不能運行的狀態(tài)。處于睡眠態(tài)的進程尚不具備運行條件,即使CPU空閑,它也無法使用。
2 進程標識號:UNIX中每個進程具有唯一的標識號,操作系統(tǒng)采用一個非負整數(shù)標識每一個進程。
UNIX中讀取進程ID號的函數(shù)如下:
#include <sys/types.h>
#include<unistd.h>
pid_t getpid(); //返回當前進程ID
pid_t getpgrp(); //返回當前進程組ID
pid_t getppid(); //返回父進程ID
類型pid_t是進程標識類型,可以用long或者int代替
2 進程的用戶標識號:當進程由用戶啟動時,該用戶的標識號就是進程的實際用戶標識,該用戶的組標識號就是進程實際組標識號。進程的實際用戶標識號和實際組標識號僅用于系統(tǒng)記賬,參與權限檢查的是進程的有效用戶標識號和有效組標識號。一般情況下,實際標識號和有效標識號相一致。
UNIX中讀取用戶ID號函數(shù)如下:
#include<unistd.h>
uid_t getuid(); //返回進程實際用戶ID
uid_t geteuid(); //返回進程有效用戶ID
gid_t getgid(); //返回進程實際組ID
gid_t getegid(); //返回進程有效組ID
實例:
#include <sys/types.h>
#include <unistd.h>
void main()
{
printf("pid=%d,gid=%d,ppid=%d\n",getpid(),getpgrp(),getppid());
printf("uid=%d,euid=%d,gid=%d,egid=%d\n",getuid(),geteuid(),getgid(),getegid());
}
2 進程命令行
實例:
#include <stdio.h>
void main(int argc,char * argv[])
{
int i;
fprintf(stderr,"argc=%d\n",argc);
for(i=0;i<argc;i++)
fprintf(stderr,"argv[%d]=%s\n",i,argv);
}
2 環(huán)境變量
UNIX中,存儲了一系列的變量,在shell下執(zhí)行"env"命令查看。
環(huán)境變量分為系統(tǒng)環(huán)境變量和用戶環(huán)境變量。系統(tǒng)環(huán)境變量在注冊師自動設置。用戶環(huán)境變量在shell中使用賦值命令和export命令設置。如下例設置了變量ZYX,再將其轉(zhuǎn)化為用戶環(huán)境變量:
#ZYX=/u/zyx //賦值語句
#export ZYX //export語句
#env |grep zyx //驗證變量
ZYX=/u/zyx
2 獲取環(huán)境變量的方法:
全局變量法。
UNIX用一個指針數(shù)組來存儲全部環(huán)境值:
extern char **environ;
實例:
#include <stdio.h>
extern char **environ;
int main()
{
char **p=environ;
while(*p)
{
fprintf(stderr,"%s\n",*p);
p++;
}
}
‚函數(shù)調(diào)用法。
UNIX中操作環(huán)境變量的函數(shù)如下:
#include <stdlib.h>
char *getenv(char *name);
int putenv(const char *string);
函數(shù)getenv以字符串形式返回環(huán)境變量name的取值,如果參數(shù)name為NULL或者環(huán)境變量列表無name變量,返回NULL。
函數(shù)putenv增加、修改或刪除環(huán)境變量。參數(shù)string指向一個字符串,格式為“name=value”。如果環(huán)境列表中沒有name變量,則增加變量并設置值為"value";如果變量已經(jīng)存在,則更改其值為"value";如果value為空,在刪除環(huán)境變量name的值。函數(shù)成功時返回非0值,否則返回0。
實例:
#include <stdlib.h>
#include <stdio.h>
int main(int argc,char **argv)
{
int i;
for(i=1;i<argc;i++)
fprintf(stderr,"%s=%s\n",argv,getenv(argv));
}
歡迎光臨 (http://m.zg4o1577.cn/bbs/) |
Powered by Discuz! X3.1 |
主站蜘蛛池模板:
综合婷婷
|
激情综合五月天
|
激情五月综合色婷婷一区二区
|
天天躁日日躁狠狠躁伊人
|
亚洲一区在线视频
|
日韩精品在线观看视频
|
国产精品免费av
|
小镇姑娘国语版在线观看免费
|
国产成人在线免费观看
|
91精品麻豆|
日本少妇高潮达到高潮
|
欧洲一区二区三区
|
www.啪啪|
一级做a爰片久久毛片潮喷
视频一二区
|
欧美视频免费
|
丝袜美腿亚洲综合
|
91久久久久久久久久久
|
国产成人av网站
|
av一区二区三区
|
精品一区av|
9.1成人免费看片
|
国产xxxx视频
|
精品国产三级
|
免费视频久久
|
国产成人在线播放
|
亚洲黄色免费
|
亚洲免费视频一区
|
一级黄色录像视频
|
成人在线免费视频
|
国产一区二区影院
|
日韩一区二区在线播放
|
成人毛片网
|
亚洲日本在线观看
|
日韩av大全
|
国产不卡在线
|
青青国产
|
日韩精品成人免费观看视频
|
日本a网站
|
精品欧美一区二区精品久久
|
一级看片免费视频
|
亚洲欧美日韩综合
|