進程api與控制

進程創(chuàng)建

 創(chuàng)建進程:
     pid_t fork(void);
 返回值:
    失敗 -1, 成功返回兩次糊啡,在父進程中返回值為子進程ID栋荸,在子進程中返回父進程ID
 注:
    子進程的代碼和父進程的代碼是一致的,但是子進程啟動之后是從fork之后開始執(zhí)行的


 獲得pid跟畅,進程id咽筋,獲得當前進程:
    pid_t fork(void);


 獲得當前進程父進程的id
    pid_t getppid(void);

進程創(chuàng)建示例代碼:

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>

int main()
{
    printf("Begin ....\n");
    pid_t pid = fork();
    if(pid < 0){
        perror("fork err");
        exit(1);
    }
    if(pid == 0){
        //子進程
        printf("I am a child,pid = %d,ppid=%d\n",getpid(),getppid());
        while(1){
            printf("I am a child\n");
            sleep(1);
        }
    }
    else if(pid > 0){
        //父進程的邏輯
        printf("childpid=%d,self=%d,ppid=%d\n",pid,getpid(),getppid());
        while(1){
            sleep(1);
        }
    }
    printf("End ....\n");
    return 0;
}

代碼示例 用父進程創(chuàng)建N個子進程:

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>

int main()
{
    int n = 5;
    int i =0;
    pid_t pid = 0;
    for(i = 0; i < 5 ; i ++){//父進程循環(huán)結束
        pid = fork();
        if(pid == 0){
            //son 
            printf("I am child ,pid=%d,ppid=%d\n",getpid(),getppid());
            break;//子進程退出循環(huán)的接口 , 否則子進程也會創(chuàng)建自己的子進程,因為fork是在一個循環(huán)中的
        }else if(pid > 0){
            //father 
            printf("I am father,pid=%d,ppid=%d\n",getpid(),getppid());
        }
    }
     sleep(i);
    if(i < 5){
        printf("I am child ,will exit,pid=%d,ppid=%d\n",getpid(),getppid());
    }
    else{
        //father
        printf("I am parent,will out pid=%d,ppid=%d\n",getpid(),getppid());
    }
    return 0;
}


進程共享

父子進程之間在fork后碍彭。有哪些相同晤硕,哪些相異之處呢?
fork之后:

父子進程相同之處:全局變量庇忌、.data(數(shù)據(jù)塊)舞箍、.text(代碼塊)、棧皆疹、堆疏橄、環(huán)境變量、用戶ID略就、宿主目錄捎迫、進程工作目錄,信號處理方...
父子進程不同之處:進程ID表牢、fork返回值窄绒、父進程ID、進程運行時間崔兴、鬧鐘彰导、未解決信號集
那么子進程復制了父進程的用戶空間內(nèi)容,已經(jīng)父進程的PCB敲茄,但pid不同位谋。子進程每fork一次都要將父進程的地址空間完全拷貝一份,然后映射至物理內(nèi)存嗎堰燎?
答案是不是的掏父。父子進程間遵循讀時共享寫時復制的原則,這樣設計秆剪,無論子進程執(zhí)行父進程的邏輯還是執(zhí)行自己的邏輯都能節(jié)省內(nèi)存開銷赊淑。

關于全局變量,子進程雖然是也擁有同樣的全局變量仅讽,但是父子進程的內(nèi)存是獨立的膏燃,所以不會有競爭問題
代碼示例 父子進程不共享全局變量:

#include <stdio.h>
#include <unistd.h>

int var = 100;

int main()
{
    pid_t pid = fork();
    if(pid == 0){
        //son 
        var = 1001;
        printf("address = %d var = %d,child,pid=%d,ppid=%d\n",&var,var,getpid(),getppid());
        sleep(3);
        printf("address = %d var = %d,child,pid=%d,ppid=%d\n",&var,var,getpid(),getppid());
    }
    else if(pid > 0){
        //parent 
        sleep(1);//保障子進程能夠修改var的值成功
        printf("address = %d var = %d,parent,pid=%d,ppid=%d\n",&var,var,getpid(),getppid());
        var=2000;
        printf("address = %d var = %d,parent,pid=%d,ppid=%d\n",&var,var,getpid(),getppid());
    }
    return 0;
}

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市何什,隨后出現(xiàn)的幾起案子组哩,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,265評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件伶贰,死亡現(xiàn)場離奇詭異蛛砰,居然都是意外死亡,警方通過查閱死者的電腦和手機黍衙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評論 2 385
  • 文/潘曉璐 我一進店門泥畅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人琅翻,你說我怎么就攤上這事位仁。” “怎么了方椎?”我有些...
    開封第一講書人閱讀 156,852評論 0 347
  • 文/不壞的土叔 我叫張陵聂抢,是天一觀的道長。 經(jīng)常有香客問我棠众,道長琳疏,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,408評論 1 283
  • 正文 為了忘掉前任闸拿,我火速辦了婚禮空盼,結果婚禮上,老公的妹妹穿的比我還像新娘新荤。我一直安慰自己揽趾,他們只是感情好,可當我...
    茶點故事閱讀 65,445評論 5 384
  • 文/花漫 我一把揭開白布苛骨。 她就那樣靜靜地躺著篱瞎,像睡著了一般。 火紅的嫁衣襯著肌膚如雪智袭。 梳的紋絲不亂的頭發(fā)上奔缠,一...
    開封第一講書人閱讀 49,772評論 1 290
  • 那天掠抬,我揣著相機與錄音吼野,去河邊找鬼。 笑死两波,一個胖子當著我的面吹牛瞳步,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播腰奋,決...
    沈念sama閱讀 38,921評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼单起,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了劣坊?” 一聲冷哼從身側響起嘀倒,我...
    開封第一講書人閱讀 37,688評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后测蘑,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體灌危,經(jīng)...
    沈念sama閱讀 44,130評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,467評論 2 325
  • 正文 我和宋清朗相戀三年碳胳,在試婚紗的時候發(fā)現(xiàn)自己被綠了勇蝙。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,617評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡挨约,死狀恐怖味混,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情诫惭,我是刑警寧澤翁锡,帶...
    沈念sama閱讀 34,276評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站贝攒,受9級特大地震影響盗誊,放射性物質發(fā)生泄漏。R本人自食惡果不足惜隘弊,卻給世界環(huán)境...
    茶點故事閱讀 39,882評論 3 312
  • 文/蒙蒙 一哈踱、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧梨熙,春花似錦开镣、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至质欲,卻和暖如春树埠,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背嘶伟。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評論 1 265
  • 我被黑心中介騙來泰國打工怎憋, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人九昧。 一個月前我還...
    沈念sama閱讀 46,315評論 2 360
  • 正文 我出身青樓绊袋,卻偏偏與公主長得像,于是被迫代替她去往敵國和親铸鹰。 傳聞我的和親對象是個殘疾皇子癌别,可洞房花燭夜當晚...
    茶點故事閱讀 43,486評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 1.內(nèi)存的頁面置換算法 (1)最佳置換算法(OPT)(理想置換算法):從主存中移出永遠不再需要的頁面;如無這樣的...
    杰倫哎呦哎呦閱讀 3,235評論 1 9
  • Linux 進程管理與程序開發(fā) 進程是Linux事務管理的基本單元圾笨,所有的進程均擁有自己獨立的處理環(huán)境和系統(tǒng)資源缤苫,...
    JamesPeng閱讀 2,451評論 1 14
  • 1 進程介紹 1.1 進程和程序 所謂進程是由正文段(text)、用戶數(shù)據(jù)段(user segment)以及系統(tǒng)數(shù)...
    瘋狂小王子閱讀 1,228評論 0 7
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴謹 對...
    cosWriter閱讀 11,090評論 1 32
  • 一墅拭、溫故而知新 1. 內(nèi)存不夠怎么辦 內(nèi)存簡單分配策略的問題地址空間不隔離內(nèi)存使用效率低程序運行的地址不確定 關于...
    SeanCST閱讀 7,784評論 0 27