2021-05-12 14:32:11
Linux環境 fork() 解析
2020-06-16 17:19:33
一 基礎知識
一個進程,包括程式碼、資料和分配給進程的資源。fork()函數通過系統呼叫建立一個與原來進程幾乎完全相同的進程
fork呼叫的一個奇妙之處就是它僅僅被呼叫一次,卻能夠返回兩次,它可能有三種不同的返回值:
1)在父進程中,fork返回新建立子進程的進程ID;
2)在子進程中,fork返回0;
3)如果出現錯誤,fork返回一個負值;
範例:
/*************************************************************************
> File Name: fork_test.c
> Author:
> Mail:
> Created Time: 2016年06月06日 星期一 09時29分05秒
************************************************************************/
#include <unistd.h>
#include <stdio.h>
int main ()
{
pid_t fpid; //fpid表示fork函數返回的值
int count=0;
fpid=fork();
if (fpid < 0)
printf("error in fork!");
else if (fpid == 0) {
printf("child process| process id= %d | fpid= %d |parentid = %d n",getpid(),fpid,getppid());
count++;
}
else {
printf("parent process| process id= %d | fpid = %d |parentid = %dn",getpid(),fpid,getppid());
count++;
}
printf("統計結果是: %d n",count);
getchar();
return 0;
}
fork出錯可能有兩種原因:
1)當前的進程數已經達到了系統規定的上限,這時errno的值被設定為EAGAIN。
2)系統記憶體不足,這時errno的值被設定為ENOMEM。
二、fork進階知識
範例
#include <unistd.h>
#include <stdio.h>
int main(void)
{
int i=0;
printf("i son/pa ppid pid fpid n");
//ppid指當前進程的父進程pid
//pid指當前進程的pid,
//fpid指fork返回給當前進程的值
for(i=0;i<2;i++){
pid_t fpid=fork();
if(fpid==0)
printf("i=%d | child ppid=%4d |pid=%4d |fpid=%4d n",i,getppid(),getpid(),fpid);
else
printf("i=%d | parent ppid=%4d |pid=%4d |fpid=%4d n",i,getppid(),getpid(),fpid);
}
getchar();
return 0;
}
執行結果
檢視進程
分析
本文永久更新連結地址:http://www.linuxidc.com/Linux/2017-03/141558.htm
相關文章