建立程序及fork函式的使用
阿新 • • 發佈:2021-02-13
建立程序及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;
}
——@上官可程式設計