1. 程式人生 > 其它 >建立程序及fork函式的使用

建立程序及fork函式的使用

技術標籤:linux嵌入式

建立程序及fork函式的使用

使用fork函式建立一個程序
pid_t fork(void);
fork函式呼叫成功返回兩次
返回值為0,代表當前程序為子程序。
返回值為非負整數,代表當前程序為父程序。
呼叫失敗,返回-1。

一、判斷父子程序是否相等

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

int   main()
{
        pid_t  pid;//父程序
        pid_t  pid2;//子程序
  	
	    pid=getpid
();//獲取pid號 printf("before fork:pid=%d\n",pid);//之前的pid號 fork(); pid2=getpid(); printf("after fork:pid=%d\n",pid2);//之後的pid號 if(pid==pid2) { printf("this is father print\n"); } else { printf("this is child print,child pid=%d\n"
,getpid()); } return 0; }

fork函式執行後,父子程序都執行if else的程式碼
在這裡插入圖片描述

二、判斷程序是父程序列印的還是子程序列印的(1)

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

int   main()
{
        pid_t  pid;//定義程序
         	
        printf("father:id=%d\n",getpid());
        /*判斷之前列印父程序的pid*/
	    pid=
fork(); if(pid>0)/*如果大於0為父程序*/ { printf("this is father print,father pid=%d\n",getpid()); } else if(pid==0)/*否則為子程序*/ { printf("this is child print,child pid=%d\n",getpid()); } return 0; }

在這裡插入圖片描述
三、判斷程序是父程序列印的還是子程序列印的(2)

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

int   main()
{
        pid_t  pid;//父程序
        pid_t  pid2;//子程序
        pid_t  retpid;//返回值的pid

	    pid=getpid();//獲取父程序
     	printf("before fork:pid=%d\n",pid);

	   retpid=fork();//fork返回值可能是0也可能大於0

	   pid2=getpid();//獲取子程序
	   printf("after fork:pid=%d\n",pid2);

     //父子程序都列印返回值retpid
	   if(pid==pid2)//fork大於0進入到父程序,大於0的值,剛好是子程序的pid號
       {
    printf("this is father print,retpid=%d\n",retpid);
       }	

	else//如果到達子程序fork返回值retpid給子程序的話就給予0
      {
  printf("this is child print,retpid=%d,child pid=%d\n",retpid,getpid());
      }

	return 0;
}

在這裡插入圖片描述
——@上官可程式設計