天天看點

【Linux】程序的建立方法以及執行個體

一、前言

1、啟動程序方法:

使用者操作方法:路經 + 程式名稱

程式進行啟動程序:

通過一個程序建立另一個程序的方法

二、方法

頭檔案:

#include <unistd.h>

1、fork() 方法:具有建立程序的功能

  • 原型:

    pid_t fork( void );

  • 調用fork的程序稱為父程序
  • 新生成的程序稱為子程序
  • 從父程序到子程序的過程我們可以了解為是将原代碼複制了一份。
  • fork() 方法調用後,父子程序都從fork調用之後的指令開始執行,這樣就不會造成一直調用fork() 無限循環的情況。
  • 在父程序中傳回子程序的pid,在子程序中傳回的是0,如果父程序建立子程序失敗,傳回 -1。
  • 舉例:
    【Linux】程式的建立方法以及執行個體

    最終結果為:

    world

    hello

    2、getpid() 方法:擷取目前程序的pid值

    3、getppid() 方法:傳回目前程序的父程序的pid

    4、注意:fork() 之後,父、子程序是并發執行的過程。

    并不是一個程序執行完,再去執行另一個程序。是以如果有想讓子程序執行的操作就放在 if 中,如果有想讓父程序執行的操作就放在 else 中。

    舉例:

int main()
 {
 	pid_t pid = fork();
    assert(pid != -1);
    if(pid == 0)
    {
    	printf("hello:%d\n",getpid());
        int i = 0;
        for(i;i<5;++i)
        {
        	printf("child\n");
        }
   }
   else
   {
      printf("world:%d\n",getpid());
      int i = 0;
      for(i;i<5;++i)
      {
          printf("father\n");
      }
   }
}
           

執行結果:

【Linux】程式的建立方法以及執行個體

5、無論是全局變量、局部變量還是堆區變量,如果在子程序中将資料進行修改,對子程序的資料不産生影響。

三、舉例

for(i = 0;i<2;++i)
{
	pid_t pid = fork();
    assert(pid != -1);
    if(pid == 0)
    {
    	printf("A\n");
    }
    else
    {
   		printf("B\n");
    }
}
           

執行結果:3個A三個B

原因是:

  • i = 0時,進行fork生成一個子程序,父程序列印的是B,子程序列印的是A,父子程序同時進行。
  • i = 1時,父程序進行fork生成一個子程序,父程序列印的是B,子程序列印的是A,而i = 0時産生的子程序還會因為調用fork産生一個子程序,此時父程序列印的是B,子程序列印的是A
    【Linux】程式的建立方法以及執行個體

繼續閱讀