歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Linux下進程編程入門筆記

Linux下進程編程入門筆記

日期:2017/3/1 9:06:00   编辑:Linux編程

fork()系統調用

    fork的作用是根據一個現有的進程復制出一個新 進程,原來的進程稱為父進程(Parent Process) ,新進程稱為子進程(Child Process)。系統中 同時運行著很多進程,這些進程都是從最初只有一個進程開始一個一個復制出來的。在Shell下輸入 命令可以運行一個程序,是因為Shell進程在讀取用戶輸入的命令之後會調用fork復制出一個新 的Shell進程,然後新的Shell進程調用exec執行新的程序。

例如:在Shell提示符下輸入命令ls,首先fork創建子進程,這時父進程仍在執行/bin/bash程序,然後子進程調用exec執行新的程序/bin/ls

除了子進程和父進程的進程ID不同,其他資源一模一樣。

——創建子進程

  1. 函數原型:

    #include<sys/types.h>  
    #include <unistd.h>  
    pid_t fork(void);  
    

返回值信息:(一次調用兩次返回的性質)
fork調用失敗則返回-1,
成功調用後父進程中返回值為子進程的pid,在子進程中返回值為1
其執行順序不定!

    特點:調用一次,返回兩次。

命令設置gdb

setfollow-fork-mode child 在fork之後跟蹤子進程

set follow-fork-mode parent 則是跟蹤父進程,然後用run命令,看到的現象是父進程一直在運行

demo:

#include <sys/types.h>  
#include <unistd.h>  
#include <stdio.h>  
#include <stdlib.h>  
#include <erron.h>

int main(int argc, char **argv)  
{  
  pid_t m_pid;  

  m_pid = fork();  
  if (pid < 0){  
    perror("fork failed");  
    exit(1);  
  }  
  if (m_pid == 0){
    printf("i am child! \n");  
  }  
  else {  
    printf("i am parent! \n");
  }    
  return 0;  
}  

Copyright © Linux教程網 All Rights Reserved