unix网络编程 关于进程

Posted on 2019-12-07 16:49  辉仔猿  阅读(131)  评论(0编辑  收藏  举报

1.fork()函数

以下是一段非常有趣的代码,代码来源:http://www.cnblogs.com/bastard/archive/2012/08/31/2664896.html

#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("i am the child process, my process id is %d/n",getpid());   
        printf("我是爹的儿子/n");//对某些人来说中文看着更直白。  
        count++;  
    }  
    else {  
        printf("i am the parent process, my process id is %d/n",getpid());   
        printf("我是孩子他爹/n");  
        count++;  
    }  
    printf("统计结果是: %d/n",count);  
    return 0;  
}  

运行代码之后,同时输出了父进程和子进程,而且两个进程的ID号也是不同的

一个进程,包括代码、数据和分配给进程的资源。fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,并且系统会给新的进程分配资源

fork()调用的奇妙之处就是它仅仅被调用一次,却能够返回两次,它可能有三种不同的返回值:

  • 在父进程中,fork返回新创建子进程的进程ID
  • 在子进程中,fork返回0
  • 如果出现错误,fork返回一个负值

fork函数执行完毕后,如果新进程创建成功,则出现两个进程,一个父进程,一个子进程,这两个进程是独立的

我们可以通过pid_t数据类型返回的值来判断当前进程是子进程还是父进程

我的理解:一个父进程经过fork生成一个子进程,这是一个过程;轮到第二个过程,之前的父进程经过fork函数之后生成一个子进程,第一个过程的子进程变成了第二个过程的父进程,经过fork之后也可以生成一个子进程。

2.getpid()函数和getppid()

getpid()

功能:取得进程识别码

返回值:目前进程的ID

getppid()

功能:取得父进程的进程识别码

返回值:目前进程的父进程识别码