1.Linux進程--進程標識號

函數原型css

pid_t fork(void);

fork的奇異之處在於它被調用一次,卻返回兩次,它可能有三種不一樣的返回值:
一、在父進程中。fork返回新建立的子進程的PID
二、在子進程中,fork返回0。
三、假設出現錯誤,fork返回一個負值。html

用途:
一、一個進程但願複製自身。從而父子進程能同一時候運行不一樣段的代碼。linux


二、進程想運行另一個程序web

#include <sys/types.h>
#include <unistd.h>

int main(){
    pid_t pid;

    /*此時僅有一個進程*/
    pid = fork();

    /*此時已有兩個進程在同一時候運行*/
    if( pid < 0)
        printf("error in fork!\n");
    else if(pid == 0)
        printf("I am the child process, ID is %d\n",getpid());
    else
        printf("I am the parent process, ID is %d\n",getpid());
    return 0;
}

在 pid = fork() 以前,僅僅有一個進程在運行,但在這條語句以後。就變成兩個進程在運行了,這兩個進程共享代碼段。將要運行的下一條語句就是 pid = fork() 以後的語句。兩個進程中,原來就存在的那個進程被稱做爲」父進程」,新出現的那個進程被做爲」子進程」,父子進程的差異在於進程標識符(PID)不一樣。
子進程的數據空間、堆棧空間都會從父進程獲得一個拷貝,而不是共享。shell

pid_t vfork(void);

一、在父進程中,fork返回新建立的子進程的PID
二、在子進程中。fork返回0。
三、假設出現錯誤,fork返回一個負值。數據庫

用途:
用vfork建立的進程主要目的是用exec函數族運行另外的程序,與fork的第二個用途一樣編程

fork 和 vfork 的差異
fork:子進程拷貝父進程的數據段。堆棧。
vfork:子進程與父進程共享數據段,堆棧。ubuntu

fork:父、子進程的運行次序不肯定
vfork:子進程先運行,父進程後運行緩存

版權聲明:本文爲博主原創文章。未經博主贊成不得轉載。

  • 本文已收錄於下面專欄:

Linux C編程--進程介紹1--進程的建立

這篇文章介紹的內容包含 1.Linux進程--進程標識號 2.進程控制--進程建立 1.Linux進程--進程標識號 進程(Process)是一個程序在其自身的虛擬地址空間...
  • DLUTBruceZhang
  • DLUTBruceZhang
  • 2013年03月02日 19:46
  • 2239

Linux C進程與多線程入門—(1)建立進程

本文出自http:http://www.wenbanana.com/?p=351稻草人博客,歡迎訪問。  進程和程序的差異 進程和程序的差異可以理解爲,進程是活動的程序,而程序是一個代...
  • wen294299195
  • wen294299195
  • 2013年01月28日 15:14
  • 2031

LINUX shell和進程建立

1、在LINUX系統中需要用到shell來執行命令。那麼shell到底是什麼?        維基百科:Unix shell也叫作命令行界面,它是Unix操做系統下傳統的用戶和計算機的交互界面。用戶...
  • mxg1991
  • mxg1991
  • 2014年04月28日 21:25
  • 1298

linux C 守護進程及其建立

涉及的概念: 守護進程:在linux或者unix操做系統中在系統引導的時候會開啓很是多服務,這些服務就叫作守護進程。爲了添加靈活性,root可以選擇系統開啓的模式。這些模式叫作執行級別。每一種執行級別以...
  • u010927811
  • u010927811
  • 2013年07月24日 11:10
  • 814

Linux C建立守護進程(daemon)及終端相關概念

引言         所謂守護進程(daemon),是不具有控制終端的,常常是在系統引導裝入時啓動,僅在系統關閉時才終止,輸出的報告信息通常在日誌文件。

        守護進程沒有控制終端一般源... markdown

  • Jammg
  • Jammg
  • 2016年04月06日 12:13
  • 898

linux c之建立進程fork和vfork函數之間的差異

一、函數簡單介紹       1)、獲得當前的進程id pid_t getpid();       2)、fork函數          要建立進程。必須調用fork函數, 系統調用for...
  • u011068702
  • u011068702
  • 2017年01月12日 20:36
  • 415

linux c之管道的介紹、建立關閉和簡單讀寫(父進程向子進程寫入數據)

一、管道介紹、        進程間通訊的幾種主要手段中。

當中管道和有名管道是最先的進程間通訊機制之中的一個,管道可用於具備親緣關係進程間的通訊。有名管道克服了管道沒有名字的限制,所以。除具       ...

  • u011068702
  • u011068702
  • 2017年02月07日 20:01
  • 1217

Linux C編程--進程介紹1--進程的建立

這篇文章介紹的內容包含 1.Linux進程--進程標識號 2.進程控制--進程建立 1.Linux進程--進程標識號 進程(Process)是一個程序在...
  • oLinXi1234567
  • oLinXi1234567
  • 2014年04月23日 12:24
  • 237

Linux C進程與多線程入門—(1)建立進程

本文出自http:http://www.wenbanana.com/?p=351稻草人博客。歡迎訪問!

  進程和程序的差異 進程和程序的差異可以理解爲,進程是活動的程序。而程序是一個代...

  • wen294299195
  • wen294299195
  • 2013年01月28日 15:14
  • 2031

Linux c進程管理—建立進程 system、execl、execlp、fork

Linux c 進程管理:   1.      建立進程:        system函數:         int system(const char*filename);             ...
  • Y_23k_bug
  • Y_23k_bug
  • 2013年08月10日 21:56
  • 6669
相關文章
相關標籤/搜索