久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

標題: 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网站 | 精品欧美一区二区精品久久 | 一级看片免费视频 | 亚洲欧美日韩综合 |