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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? 多進程編程.htm

?? windows網絡編程技術文章
?? HTM
?? 第 1 頁 / 共 5 頁
字號:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0045)http://www.chinalinuxpub.com/doc/pro/mpp.html -->
<HTML><HEAD><TITLE>多進程編程</TITLE>
<META http-equiv=Content-Type content="text/html; charset=gb2312">
<META content="MSHTML 6.00.2800.1400" name=GENERATOR></HEAD>
<BODY>
<DIV align=center>
<CENTER>
<TABLE height=292 width=750 border=0>
  <TBODY>
  <TR>
    <TD width=733 height=292>
      <P align=center><FONT color=#9879c6><BIG><BIG>多進程編程 
</BIG></BIG></FONT></P>
      <P align=center></P>
      <DIV align=center>
      <CENTER><PRE>        

寫在前面的話
    本文主要根據本人在UNIX系統上的編程實踐經驗總結而成, 既做為自己在
一個時期內編程實踐的部分總結, 又可成為文章發表. 對UNIX程序員初學者來
說是一個小小的經驗, 僅供參考; 對UNIX老手來說則不值一哂, 請各位多多指
教.

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

二.常用的多進程編程的系統調用
    1.fork()
        功能:創建一個新的進程.
        語法:#include &lt;unistd.h&gt;
             #include &lt;sys/types.h&gt;
             pid_t fork();
        說明:本系統調用產生一個新的進程, 叫子進程, 是調用進程的一個復
             制品. 調用進程叫父進程, 子進程繼承了父進程的幾乎所有的屬
             性:
             . 實際UID,GID和有效UID,GID.
             . 環境變量.
             . 附加GID.
             . 調用exec()時的關閉標志.
             . UID設置模式比特位.
             . GID設置模式比特位.
             . 進程組號.
             . 會話ID.
             . 控制終端.
             . 當前工作目錄.
             . 根目錄.
             . 文件創建掩碼UMASK.
             . 文件長度限制ULIMIT.
             . 預定值, 如優先級和任何其他的進程預定參數, 根據種類不同
               決定是否可以繼承.
             . 還有一些其它屬性.
             但子進程也有與父進程不同的屬性:
             . 進程號, 子進程號不同與任何一個活動的進程組號.
             . 父進程號.
             . 子進程繼承父進程的文件描述符或流時, 具有自己的一個拷貝
               并且與父進程和其它子進程共享該資源.
             . 子進程的用戶時間和系統時間被初始化為0.
             . 子進程的超時時鐘設置為0.
             . 子進程的信號處理函數指針組置為空.
             . 子進程不繼承父進程的記錄鎖.
        返回值: 調用成功則對子進程返回0, 對父進程返回子進程號, 這也是
             最方便的區分父子進程的方法. 若調用失敗則返回-1給父進程,
             子進程不生成.
        例子:pid_t pid;
             if ((pid=fork())&gt;0) {
                 /*父進程處理過程*/
             }
             else if (pid==0) {
                 /*子進程處理過程*/
                 exit(0);     /*注意子進程必須用exit()退出運行*/
             }
             else {
                 printf("fork error\n");
                 exit(0);
             }
    2.system()
        功能:產生一個新的進程, 子進程執行指定的命令.
        語法:#include &lt;stdio.h&gt;
             #include &lt;stdlib.h&gt;
             int system(string)
             char *string;
        說明:本調用將參數string傳遞給一個命令解釋器(一般為sh)執行, 即
             string被解釋為一條命令, 由sh執行該命令.若參數string為一
             個空指針則為檢查命令解釋器是否存在.
             該命令可以同命令行命令相同形式, 但由于命令做為一個參數放
             在系統調用中, 應注意編譯時對特殊意義字符的處理. 命令的查
             找是按PATH環境變量的定義的. 命令所生成的后果一般不會對父
             進程造成影響.
        返回值:當參數為空指針時, 只有當命令解釋器有效時返回值為非零.
             若參數不為空指針, 返回值為該命令的返回狀態(同waitpid())
             的返回值. 命令無效或語法錯誤則返回非零值,所執行的命令被
             終止. 其他情況則返回-1.
        例子:char command[81];
             int i;
             for (i=1;i&lt;8;i++) {
                 sprintf(command,"ps -t tty%02i",i);
                 system(command);
             }
    3.exec()
        功能:執行一個文件
        語法:#include &lt;unistd.h&gt;
             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[];
        說明:這是一個系統調用族, 用于將一個新的程序調入本進程所占的內
             存, 并覆蓋之, 產生新的內存進程映象. 新的程序可以是可執行
             文件或SHELL批命令.
             當C程序被執行時,是如下調用的:
             main(int argc,char *argv[],char *envp[]);
             argc是參數個數,是各個參數字符串指針數組,envp是新進程的環
             境變量字符串的指針數組.argc至少為1,argv[0]為程序文件名,
             所以,在上面的exec系統調用族中,path為新進程文件的路徑名,
             file為新進程文件名,若file不是全路徑名,系統調用會按PATH環
             境變量自動找對應的可執行文件運行.若新進程文件不是一個可
             執行的目標文件(如批處理文件),則execlp()和execvp()會將該
             文件內容作為一個命令解釋器的標準輸入形成system().
             arg0,...等指針指向'\0'結束的字符串,組成新進程的有效參數,
             且該參數列表以一個空指針結束.反過來,arg0至少必須存在并指
             向新進程文件名或路徑名.
             同樣,argv是字符串指針數組,argv[0]指向新進程文件名或路徑
             名,并以一空指針結束.
             envp是一個字符串指針數組,以空指針結束,這些字符串組成新進
             程的環境.
             在調用這些系統調用前打開的文件指針對新進程來說也是打開的,
             除非它已定義了close-on-exec標志.打開的文件指針在新進程中
             保持不變,所有相關的文件鎖也被保留.
             調用進程設置并正被捕俘的信號在新進程中被恢復為缺省設置,
             其它的則保持不變.
             新進程啟動時按文件的SUID和SGID設置定義文件的UID和GID為有
             效UID和GID.
             新進程還繼承了如下屬性:
             . 附加GID.
             . 進程號.
             . 父進程號.
             . 進程組號.
             . 會話號.
             . 控制終端.
             . alarm時鐘信號剩下的時間.
             . 當前工作目錄.
             . 根目錄.
             . 文件創建掩碼.
             . 資源限制.
             . 用戶時間,系統時間,子進程用戶時間,子進程系統時間.
             . 記錄鎖.
             . 進程信號掩碼.
             . 信號屏蔽.
             . 優先級.
             . 預定值.
             調用成功后,系統調用修改新進程文件的最新訪問時間.
        返回值:該系統調用一般不會有成功返回值, 因為原來的進程已蕩然無
             存.
        例子:printf("now this process will be ps command\n");
             execl("/bin/ps","ps","-ef",NULL);
    4.popen()
        功能:初始化從/到一個進程的管道.
        語法:#include &lt;stdio.h&gt;
             FILE *popen(command,type)
             char *command,type;
        說明:本系統調用在調用進程和被執行命令間創建一個管道.
             參數command做為被執行的命令行.type做為I/O模式,"r"為從被
             執行命令讀,"w"為向被執行命令寫.返回一個標準流指針,做為管
             道描述符,向被執行命令讀或寫數據(做為被執行命令的STDIN或
             STDOUT)該系統調用可以用來在程序中調用系統命令,并取得命令
             的輸出信息或者向命令輸入信息.
        返回值:不成功則返回NULL,成功則返回管道的文件指針.
    5.pclose()
        功能:關閉到一個進程的管道.
        語法:#include &lt;stdio.h&gt;
             int pclose(strm)
             FILE *strm;
        說明:本系統調用用于關閉由popen()打開的管道,并會等待由popen()
             激活的命令執行結束后,關閉管道后讀取命令返回碼.
        返回值:若關閉的文件描述符不是由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()
        功能:等待一個子進程返回并修改狀態
        語法:#include &lt;sys/types.h&gt;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91香蕉视频mp4| 亚洲午夜久久久久| 国产区在线观看成人精品| 国产精品不卡在线| 日韩电影在线观看电影| jlzzjlzz亚洲女人18| 3d成人h动漫网站入口| 国产精品色婷婷| 蜜臀久久99精品久久久画质超高清 | 国产成人av电影在线播放| 日韩久久久精品| 成人h精品动漫一区二区三区| 在线观看国产91| 国产三级精品在线| 日日夜夜免费精品| 97精品视频在线观看自产线路二| 337p粉嫩大胆噜噜噜噜噜91av | 在线亚洲免费视频| 国产日产欧美一区二区三区| 免费精品视频在线| 欧美日韩免费不卡视频一区二区三区| 亚洲国产精品av| 国产一区二区在线免费观看| 欧美一区二区三区视频| 一区二区三区在线视频观看58| 国产乱子伦一区二区三区国色天香| 欧美久久久久久久久| 亚洲一区二区在线视频| 欧美丰满一区二区免费视频| 亚洲蜜臀av乱码久久精品| 国产99久久精品| 久久九九久久九九| 国产精品中文字幕一区二区三区| 日韩欧美的一区二区| 日本欧美一区二区| 日韩欧美国产系列| 久久精品久久综合| 精品嫩草影院久久| 狠狠色综合播放一区二区| 欧美成人猛片aaaaaaa| 精品一区二区在线视频| 精品久久久久久久久久久院品网| 久久99精品久久久久久动态图 | 亚洲在线视频免费观看| 99视频超级精品| 亚洲猫色日本管| 一本大道久久精品懂色aⅴ | 99re视频这里只有精品| 国产精品福利一区二区| 色综合色狠狠天天综合色| 一级做a爱片久久| 欧美日韩第一区日日骚| 日产欧产美韩系列久久99| 日韩区在线观看| 狠狠色狠狠色综合系列| 中文无字幕一区二区三区| 91在线观看免费视频| 午夜伊人狠狠久久| 欧美一区二区三区白人 | 午夜精品成人在线视频| 日韩欧美专区在线| 懂色av一区二区在线播放| 亚洲私人黄色宅男| 在线播放91灌醉迷j高跟美女 | 欧美主播一区二区三区美女| 日韩黄色免费电影| 国产视频一区在线播放| 91精品1区2区| 日本免费在线视频不卡一不卡二| 国产亚洲欧洲一区高清在线观看| av不卡在线播放| 亚洲成人激情av| 粉嫩aⅴ一区二区三区四区| 国产精品久久久久天堂| 日韩欧美成人激情| 成人动漫一区二区在线| 亚洲伊人伊色伊影伊综合网| 欧美一区二区福利视频| 不卡视频免费播放| 婷婷丁香久久五月婷婷| 中文字幕成人网| 在线91免费看| 色综合天天视频在线观看 | 中文字幕成人av| 欧美精品乱人伦久久久久久| youjizz国产精品| 久热成人在线视频| 亚洲国产一区在线观看| 欧美激情一区二区三区在线| 欧美精品v国产精品v日韩精品 | 成人97人人超碰人人99| 免费av成人在线| 一区二区三区欧美视频| 国产夜色精品一区二区av| 91精品综合久久久久久| 91蝌蚪porny| 国产精品一区二区91| 美洲天堂一区二卡三卡四卡视频| 一区二区视频免费在线观看| 国产日韩精品一区二区三区| 日韩午夜电影av| 欧美日韩国产片| 91福利资源站| 91在线免费播放| 成人国产精品免费| 国产超碰在线一区| 国模大尺度一区二区三区| 天堂va蜜桃一区二区三区漫画版| 亚洲精品午夜久久久| 国产精品成人免费在线| 国产精品区一区二区三区| 久久精品欧美日韩| 久久久久国产精品免费免费搜索| 欧美精品一区男女天堂| 日韩精品一区二区三区中文不卡| 91精品国产综合久久久蜜臀图片| 欧美日韩免费一区二区三区视频 | 亚洲精品视频一区二区| 国产精品网曝门| 国产精品毛片久久久久久| 国产日韩欧美麻豆| 亚洲国产精品精华液ab| 国产欧美综合在线观看第十页| 久久久久国色av免费看影院| 国产亚洲精品7777| 国产精品午夜免费| 亚洲丝袜另类动漫二区| 亚洲精品高清视频在线观看| 一个色妞综合视频在线观看| 国产999精品久久久久久| 国产剧情一区二区三区| 成人精品一区二区三区中文字幕 | 久久草av在线| 国产精品中文欧美| 成人97人人超碰人人99| 色天天综合色天天久久| 欧美日韩国产综合久久| 3d动漫精品啪啪1区2区免费| 精品噜噜噜噜久久久久久久久试看| 久久免费视频色| 最新高清无码专区| 亚洲va在线va天堂| 国产综合色在线| 91在线观看成人| 欧美日韩精品一区视频| 精品成人佐山爱一区二区| 国产欧美精品一区二区三区四区 | 日韩欧美电影一区| 亚洲国产高清在线观看视频| 亚洲美女在线国产| 免费高清视频精品| 成人国产在线观看| 911精品国产一区二区在线| 久久精品人人爽人人爽| 一区二区三区精品视频| 免费av成人在线| 91一区二区三区在线观看| 欧美军同video69gay| 国产欧美精品一区二区色综合朱莉| 亚洲精品菠萝久久久久久久| 久久精品99国产精品日本| 99久久综合精品| 日韩欧美中文字幕公布| 中文字幕一区二区不卡| 蜜臀av一区二区在线观看| 91香蕉视频黄| 精品福利av导航| 性做久久久久久| 不卡的电视剧免费网站有什么| 7777精品伊人久久久大香线蕉经典版下载 | 盗摄精品av一区二区三区| 欧美在线视频全部完| 中文字幕欧美日本乱码一线二线| 爽好久久久欧美精品| 91免费视频观看| 国产亚洲一区字幕| 美女视频黄 久久| 欧美性大战久久久| 国产精品你懂的| 国产中文字幕精品| 欧美二区在线观看| 亚洲激情在线激情| 成人久久久精品乱码一区二区三区| 欧美成人艳星乳罩| 丝袜美腿亚洲综合| 欧美午夜精品一区| 18成人在线视频| 成人综合婷婷国产精品久久蜜臀| 欧美tickling挠脚心丨vk| 天天亚洲美女在线视频| 欧美午夜不卡在线观看免费| 最近日韩中文字幕| 538prom精品视频线放| 亚洲国产日韩一级| 欧美综合色免费| 一区二区三区在线视频免费观看| 99精品欧美一区二区三区小说| 国产欧美一区在线| 国产大陆亚洲精品国产| 久久亚洲综合色一区二区三区|