亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? 多進程編程的相關(guān)知識總結(jié)(一).txt

?? 本資源中含有有關(guān)LINUX進程通信的一些文章
?? TXT
?? 第 1 頁 / 共 5 頁
字號:
一.多進程程序的特點 
由于UNIX系統(tǒng)是分時多用戶系統(tǒng), CPU按時間片分配給各個用戶使用, 而在實質(zhì)上
應(yīng)該 
說CPU按時間片分配給各個進程使用, 每個進程都有自己的運行環(huán)境以使得在CPU
做進程 
切換時不會"忘記"該進程已計算了一半的"半成品". 以DOS的概念來說, 進程的切
換都 
是一次"DOS中斷"處理過程, 包括三個層次: 
    (1)用戶數(shù)據(jù)的保存: 包括正文段(TEXT), 數(shù)據(jù)段(DATA,BSS), 棧段(STACK)
, 共享 
內(nèi)存段(SHARED MEMORY)的保存. 
        (2)寄存器數(shù)據(jù)的保存: 包括PC(program counter,指向下一條要執(zhí)行的
令的地址), PSW(processor status word,處理機狀態(tài)字), SP(stack pointer,棧
針), PCBP(pointer of process control block,進程控制塊指針), FP(frame 
pointer,指向棧中一個函數(shù)的local變量的首地址), AP(augument pointer,指向
棧中函 
數(shù)調(diào)用的實參位置), ISP(interrupt stack pointer,中斷棧指針), 以及其他的
通用寄 
存器等. 
        (3)系統(tǒng)層次的保存: 包括proc,u,虛擬存儲空間管理表格,中斷處理棧.
以便于 
該進程再一次得到CPU時間片時能正常運行下去.既然系統(tǒng)已經(jīng)處理好所有這些中
斷處理 
的過程, 我們做程序還有什么要擔(dān)心的呢? 我們盡可以使用系統(tǒng)提供的多進程的
特點, 
讓幾個程序精誠合作, 簡單而又高效地把結(jié)果給它搞出來. 
    另外,UNIX系統(tǒng)本身也是用C語言寫的多進程程序,多進程編程是UNIX的特點,
當(dāng)我們 
熟悉了多進程編程后,將會對UNIX系統(tǒng)機制有一個較深的認(rèn)識.首先我介紹一下多
進程程 
序的一些突出的特點: 
    1.并行化 
        一件復(fù)雜的事件是可以分解成若干個簡單事件來解決的, 這在程序員 
    的大腦中早就形成了這種概念, 首先將問題分解成一個個小問題, 將小問 
    題再細(xì)分, 最后在一個合適的規(guī)模上做成一個函數(shù). 在軟件工程中也是這 
    么說的. 如果我們以圖的方式來思考, 一些小問題的計算是可以互不干擾 
    的, 可以同時處理, 而在關(guān)鍵點則需要統(tǒng)一在一個地方來處理, 這樣程序 
    的運行就是并行的, 至少從人的時間觀念上來說是這樣的. 而每個小問題 
    的計算又是較簡單的. 
    2.簡單有序 
        這樣的程序?qū)Τ绦騿T來說不亞于管理一班人, 程序員為每個進程設(shè)計 
    好相應(yīng)的功能, 并通過一定的通訊機制將它們有機地結(jié)合在一起, 對每個 
    進程的設(shè)計是簡單的, 只在總控部分小心應(yīng)付(其實也是蠻簡單的), 就可 
    完成整個程序的施工. 
    3.互不干擾 
        這個特點是操作系統(tǒng)的特點, 各個進程是獨立的, 不會串位. 
    4.事務(wù)化 
        比如在一個數(shù)據(jù)電話查詢系統(tǒng)中, 將程序設(shè)計成一個進程只處理一次 
    查詢即可, 即完成一個事務(wù). 當(dāng)電話查詢開始時, 產(chǎn)生這樣一個進程對付 
    這次查詢; 另一個電話進來時, 主控程序又產(chǎn)生一個這樣的進程對付, 每 
    個進程完成查詢?nèi)蝿?wù)后消失. 這樣的編程多簡單, 只要做一次查詢的程序 
    就可以了. 

二.常用的多進程編程的系統(tǒng)調(diào)用 
    1.fork() 
        功能:創(chuàng)建一個新的進程. 
        語法:#include  
             #include  
             pid_t fork(); 
        說明:本系統(tǒng)調(diào)用產(chǎn)生一個新的進程, 叫子進程, 是調(diào)用進程的一個復(fù) 

             制品. 調(diào)用進程叫父進程, 子進程繼承了父進程的幾乎所有的屬 

             性: 
             . 實際UID,GID和有效UID,GID. 
             . 環(huán)境變量. 
             . 附加GID. 
             . 調(diào)用exec()時的關(guān)閉標(biāo)志. 
             . UID設(shè)置模式比特位. 
             . GID設(shè)置模式比特位. 
             . 進程組號.
             . 會話ID. 
             . 控制終端. 
             . 當(dāng)前工作目錄. 
             . 根目錄. 
             . 文件創(chuàng)建掩碼UMASK. 
             . 文件長度限制ULIMIT. 
             . 預(yù)定值, 如優(yōu)先級和任何其他的進程預(yù)定參數(shù), 根據(jù)種類不同 

               決定是否可以繼承. 
             . 還有一些其它屬性. 
             但子進程也有與父進程不同的屬性: 
             . 進程號, 子進程號不同與任何一個活動的進程組號. 
             . 父進程號. 
             . 子進程繼承父進程的文件描述符或流時, 具有自己的一個拷貝 

               并且與父進程和其它子進程共享該資源. 
             . 子進程的用戶時間和系統(tǒng)時間被初始化為0. 
             . 子進程的超時時鐘設(shè)置為0. 
             . 子進程的信號處理函數(shù)指針組置為空. 
             . 子進程不繼承父進程的記錄鎖. 
        返回值: 調(diào)用成功則對子進程返回0, 對父進程返回子進程號, 這也是 

             最方便的區(qū)分父子進程的方法. 若調(diào)用失敗則返回-1給父進程, 
             子進程不生成. 
        例子:pid_t pid; 
             if ((pid=fork())>0) { 
                 /*父進程處理過程*/ 
             } 
             else if (pid==0) { 
                 /*子進程處理過程*/ 
                 exit(0);     /*注意子進程必須用exit()退出運行*/ 
             } 
             else { 
                 printf("fork error\n"); 
                 exit(0); 
             } 
    2.system() 
        功能:產(chǎn)生一個新的進程, 子進程執(zhí)行指定的命令. 
        語法:#include  
             #include  
             int system(string) 
             char *string;
 說明:本調(diào)用將參數(shù)string傳遞給一個命令解釋器(一般為sh)執(zhí)行, 即 

             string被解釋為一條命令, 由sh執(zhí)行該命令.若參數(shù)string為一 
             個空指針則為檢查命令解釋器是否存在. 
             該命令可以同命令行命令相同形式, 但由于命令做為一個參數(shù)放 

             在系統(tǒng)調(diào)用中, 應(yīng)注意編譯時對特殊意義字符的處理. 命令的查 

             找是按PATH環(huán)境變量的定義的. 命令所生成的后果一般不會對父 

             進程造成影響. 
        返回值:當(dāng)參數(shù)為空指針時, 只有當(dāng)命令解釋器有效時返回值為非零. 
             若參數(shù)不為空指針, 返回值為該命令的返回狀態(tài)(同waitpid()) 
             的返回值. 命令無效或語法錯誤則返回非零值,所執(zhí)行的命令被 
             終止. 其他情況則返回-1. 
        例子:char command[81]; 
             int i; 
             for (i=1;i<8;i++) { 
sprintf(command,"ps -t tty%02i",i); 
system(command); 
} 
3.exec() 
功能:執(zhí)行一個文件 
語法:#include 
             int execl(path,arg0,...,argn,(char*)0) 
             char *path,*arg0,...,*argn; 

             int execv(path,argv) 
             char *path,*argv[]; 

             int execle(path,arg0,...,argn,(char*)0,envp) 
             char *path,*arg0,...,*argn,*envp[]; 

             int execve(path,argv,envp) 
             char *path,*argv[],*envp[]; 

             int execvp(file,argv) 
             char *file,*argv[]; 
        說明:這是一個系統(tǒng)調(diào)用族, 用于將一個新的程序調(diào)入本進程所占的內(nèi) 

             存, 并覆蓋之, 產(chǎn)生新的內(nèi)存進程映象. 新的程序可以是可執(zhí)行 

             文件或SHELL批命令. 
             當(dāng)C程序被執(zhí)行時,是如下調(diào)用的: 
             main(int argc,char *argv[],char *envp[]); 
             argc是參數(shù)個數(shù),是各個參數(shù)字符串指針數(shù)組,envp是新進程的環(huán) 

             境變量字符串的指針數(shù)組.argc至少為1,argv[0]為程序文件名, 
             所以,在上面的exec系統(tǒng)調(diào)用族中,path為新進程文件的路徑名, 
             file為新進程文件名,若file不是全路徑名,系統(tǒng)調(diào)用會按PATH環(huán) 

             境變量自動找對應(yīng)的可執(zhí)行文件運行.若新進程文件不是一個可 
             執(zhí)行的目標(biāo)文件(如批處理文件),則execlp()和execvp()會將該
文件內(nèi)容作為一個命令解釋器的標(biāo)準(zhǔn)輸入形成system(). 
             arg0,...等指針指向'\0'結(jié)束的字符串,組成新進程的有效參數(shù), 

             且該參數(shù)列表以一個空指針結(jié)束.反過來,arg0至少必須存在并指 

             向新進程文件名或路徑名. 
             同樣,argv是字符串指針數(shù)組,argv[0]指向新進程文件名或路徑 
             名,并以一空指針結(jié)束. 
             envp是一個字符串指針數(shù)組,以空指針結(jié)束,這些字符串組成新進 

             程的環(huán)境. 
             在調(diào)用這些系統(tǒng)調(diào)用前打開的文件指針對新進程來說也是打開的,

             除非它已定義了close-on-exec標(biāo)志.打開的文件指針在新進程中 

             保持不變,所有相關(guān)的文件鎖也被保留. 
             調(diào)用進程設(shè)置并正被捕俘的信號在新進程中被恢復(fù)為缺省設(shè)置, 
             其它的則保持不變. 
             新進程啟動時按文件的SUID和SGID設(shè)置定義文件的UID和GID為有 

             效UID和GID. 
             新進程還繼承了如下屬性: 
             . 附加GID. 
             . 進程號. 
             . 父進程號. 
             . 進程組號. 
             . 會話號. 
             . 控制終端. 
             . alarm時鐘信號剩下的時間. 
             . 當(dāng)前工作目錄. 
             . 根目錄. 
             . 文件創(chuàng)建掩碼. 
             . 資源限制. 
             . 用戶時間,系統(tǒng)時間,子進程用戶時間,子進程系統(tǒng)時間. 
             . 記錄鎖. 
             . 進程信號掩碼. 
             . 信號屏蔽. 
             . 優(yōu)先級. 
             . 預(yù)定值. 
             調(diào)用成功后,系統(tǒng)調(diào)用修改新進程文件的最新訪問時間. 
        返回值:該系統(tǒng)調(diào)用一般不會有成功返回值, 因為原來的進程已蕩然無 

             存. 
        例子:printf("now this process will be ps command\n"); 
             execl("/bin/ps","ps","-ef",NULL); 
    4.popen()
 功能:初始化從/到一個進程的管道. 
        語法:#include  
             FILE *popen(command,type) 
             char *command,type; 
        說明:本系統(tǒng)調(diào)用在調(diào)用進程和被執(zhí)行命令間創(chuàng)建一個管道. 
             參數(shù)command做為被執(zhí)行的命令行.type做為I/O模式,"r"為從被 
             執(zhí)行命令讀,"w"為向被執(zhí)行命令寫.返回一個標(biāo)準(zhǔn)流指針,做為管 

             道描述符,向被執(zhí)行命令讀或?qū)憯?shù)據(jù)(做為被執(zhí)行命令的STDIN或 
             STDOUT)該系統(tǒng)調(diào)用可以用來在程序中調(diào)用系統(tǒng)命令,并取得命令 

             的輸出信息或者向命令輸入信息. 
        返回值:不成功則返回NULL,成功則返回管道的文件指針. 
    5.pclose() 
        功能:關(guān)閉到一個進程的管道. 
        語法:#include  
             int pclose(strm) 
             FILE *strm; 
        說明:本系統(tǒng)調(diào)用用于關(guān)閉由popen()打開的管道,并會等待由popen() 
             激活的命令執(zhí)行結(jié)束后,關(guān)閉管道后讀取命令返回碼. 
        返回值:若關(guān)閉的文件描述符不是由popen()打開的,則返回-1. 
        例子:printf("now this process will call popen system call\n");

             FILE * fd; 
             if ((fd=popen("ps -ef","r"))==NULL) { 
                 printf("call popen failed\n"); 
                 return; 
             } 
             else { 
                 char str[80]; 
                 while (fgets(str,80,fd)!=NULL) 
                     printf("%s\n",str); 
             } 
             pclose(fd); 
    6.wait() 
        功能:等待一個子進程返回并修改狀態(tài) 
        語法:#include  
             #include  
             pid_t wait(stat_loc) 
             int *stat_loc; 
        說明:允許調(diào)用進程取得子進程的狀態(tài)信息.調(diào)用進程將會掛起直到其 
             一個子進程終止. 
        返回值:等待到一個子進程返回時,返回值為該子進程號,否則返回值為 

             -1.同時stat_loc返回子進程的返回值.
        例子:/*父進程*/ 
             if (fork()>0) { 
                 wait((int *)0); 
                 /*父進程等待子進程的返回*/ 
             } 
             else { 
                 /*子進程處理過程*/ 
                 exit(0); 
             } 
    7.waitpid() 
        功能:等待指定進程號的子進程的返回并修改狀態(tài) 
        語法:#include  

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美男女性生活在线直播观看| 国产精品国产三级国产普通话蜜臀 | 成人精品国产福利| 欧美在线视频日韩| 久久九九国产精品| 日韩电影在线观看一区| www.激情成人| 精品国产99国产精品| 亚洲高清视频的网址| www.一区二区| wwwwww.欧美系列| 日韩av成人高清| 欧美综合一区二区三区| 亚洲欧洲精品一区二区三区不卡| 免费成人小视频| 欧美精品日韩精品| 亚洲综合偷拍欧美一区色| 国产成人精品亚洲日本在线桃色 | 国产一区二区三区av电影| 欧美日韩一卡二卡三卡| 亚洲女人的天堂| 成人av中文字幕| 久久日韩粉嫩一区二区三区| 美女脱光内衣内裤视频久久影院| 欧美日韩美女一区二区| 亚洲精品伦理在线| 91年精品国产| 中文字幕一区二区三区四区不卡| 国产精品一二三四区| 精品国产污网站| 激情文学综合网| 久久品道一品道久久精品| 韩国成人在线视频| 精品国产乱子伦一区| 国内精品伊人久久久久av一坑| 日韩一区二区三区免费看| 日韩精品成人一区二区三区| 91.成人天堂一区| 石原莉奈在线亚洲三区| 欧美一区二区性放荡片| 免费成人在线视频观看| 精品免费一区二区三区| 国产精品一级片| 国产精品毛片a∨一区二区三区| 从欧美一区二区三区| 国产精品理论在线观看| 91免费国产视频网站| 亚洲国产精品一区二区久久恐怖片 | 欧美日韩一区不卡| 蜜桃精品视频在线| 久久婷婷色综合| heyzo一本久久综合| 亚洲欧美日韩电影| 欧美天天综合网| 日韩av二区在线播放| 久久先锋影音av鲁色资源| 成人激情图片网| 一区二区三区日韩在线观看| 欧美日韩国产精选| 精品在线亚洲视频| 成人欧美一区二区三区在线播放| 在线国产亚洲欧美| 久久99精品久久久久久动态图| 国产精品三级电影| 欧美老肥妇做.爰bbww视频| 美女视频黄 久久| 亚洲国产激情av| 欧美日韩免费在线视频| 韩国午夜理伦三级不卡影院| 亚洲乱码国产乱码精品精可以看| 欧美二区三区的天堂| 国产69精品久久99不卡| 亚洲午夜免费视频| 欧美激情一区二区三区在线| 在线观看国产精品网站| 国产一区二区精品久久99| 亚洲综合一二三区| 欧美国产欧美综合| 日韩一区二区视频| 91精品福利在线| 丰满放荡岳乱妇91ww| 天天影视网天天综合色在线播放| 国产精品久久久久久久第一福利 | 亚洲成人精品一区| 国产精品久久夜| 久久亚洲免费视频| 欧美电影在线免费观看| 97久久超碰国产精品电影| 国产精品一卡二| 美腿丝袜亚洲三区| 亚洲国产中文字幕在线视频综合| 国产精品视频一二| 久久久综合激的五月天| 日韩欧美一区二区久久婷婷| 欧美亚洲综合一区| 91在线视频免费91| 成人小视频在线观看| 国产精品一区二区三区四区| 蜜桃久久精品一区二区| 日韩电影在线免费| 亚洲成av人片一区二区| 一区二区三区日韩精品视频| 亚洲欧洲av另类| 国产精品色一区二区三区| 久久在线观看免费| 欧美v日韩v国产v| 欧美精品久久99久久在免费线 | 色婷婷综合激情| 成人综合在线观看| 国产精品18久久久久久久久久久久| 日韩影视精彩在线| 三级影片在线观看欧美日韩一区二区| 综合欧美一区二区三区| 亚洲国产精品成人久久综合一区| 久久久99精品久久| 国产日韩av一区二区| 久久久久国产精品麻豆ai换脸| 精品国产91久久久久久久妲己| 精品国产一区二区三区四区四| 日韩精品资源二区在线| 亚洲精品在线免费播放| 精品久久久久99| 国产日产欧美一区二区视频| 日本一区二区三区在线观看| 国产精品每日更新在线播放网址| 国产精品欧美经典| 亚洲欧美经典视频| 亚洲综合色区另类av| 午夜一区二区三区在线观看| 日本伊人精品一区二区三区观看方式| 日本免费在线视频不卡一不卡二 | 国产高清不卡一区二区| 国产精品77777竹菊影视小说| 成人精品鲁一区一区二区| 一本大道av伊人久久综合| 在线视频欧美精品| 欧美一区二视频| 久久久久99精品一区| 亚洲女人小视频在线观看| 午夜不卡av在线| 国产精品91一区二区| 91浏览器在线视频| 欧美高清激情brazzers| 久久亚洲精品国产精品紫薇| 国产精品色哟哟网站| 亚洲成人激情自拍| 国产在线播精品第三| 91网站在线观看视频| 欧美一区二区女人| 1区2区3区精品视频| 亚洲成人激情av| 国产成人在线影院 | 伊人开心综合网| 麻豆传媒一区二区三区| 99久久婷婷国产| 欧美成人午夜电影| 中文字幕制服丝袜一区二区三区 | 午夜精品久久久久久久久久久| 精品一区二区在线视频| jvid福利写真一区二区三区| 欧美一区二区三区视频在线| 久久久av毛片精品| 日韩黄色片在线观看| 成人在线综合网站| 欧美疯狂性受xxxxx喷水图片| 欧美激情一区二区三区| 日本亚洲视频在线| 色综合久久久久久久| 精品福利视频一区二区三区| 亚洲色图一区二区三区| 精品一区二区三区免费| 欧美日韩精品一区二区三区| 国产精品久久久久久久久久久免费看| 日本成人在线看| 欧美吞精做爰啪啪高潮| 中文字幕五月欧美| 国产精品一品二品| 欧美videofree性高清杂交| 一区二区激情视频| 成人h精品动漫一区二区三区| 91精品蜜臀在线一区尤物| 夜夜亚洲天天久久| 91在线视频在线| 国产精品久久网站| 国产精品18久久久久久久网站| 日韩欧美二区三区| 首页国产丝袜综合| 欧美日韩精品一区视频| 怡红院av一区二区三区| 99久久er热在这里只有精品15| 国产女人水真多18毛片18精品视频 | 亚洲欧美日韩国产综合在线| 国产91丝袜在线播放九色| 26uuu久久天堂性欧美| 青青青爽久久午夜综合久久午夜| 欧美日韩一区二区在线视频| 一片黄亚洲嫩模| 欧美中文字幕亚洲一区二区va在线| 亚洲婷婷国产精品电影人久久| yourporn久久国产精品|