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函数执行完毕后,如果新进程创建成功,则出现两个进程,一个父进程,一个子进程,这两个进程是独立的

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

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

2.getpid()函数和getppid()

getpid()

功能:取得进程识别码

返回值:目前进程的ID

getppid()

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

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

12-25 16:43
查看更多