日期:2014-05-16  浏览次数:20714 次

对fork()的理解
对fork()始终还是不太明白,看看这样理解是否正确
1个父进程(A)中调用1次fork()函数,该fork()函数若创建成功则返回2次,即0/正数值;
当返回0时,则该父进程(A)下创建了一个子进程(B),子进程(B)向其自身返回自身ID值;
当返回正数值时,该父进程(A)下仍然创建同一个子进程(B),但该子进程(B)则向父进程(A)返回其ID值;

所以在以下函数中,调用1次返回2次,每次执行以下2条printf()语句,
因此获得值为2个子进程的ID和2个父进程的ID:

#include<stdio.h>
main(){
  fork();
  printf("child id%d\n",getpid());
  printf("parent id%d\n",getppid());
}

------解决方案--------------------
给你改几行代码,就好懂了。
C/C++ code

#include <stdio.h>
#include <stdlib.h>
main()
{
    pid_t id = fork();
    sleep(10);
    if(id==0)
    {
        printf("--- id%d\n",id);
        printf("---child id%d\n",getpid());
        printf("---parent id%d\n",getppid());
    }
    else
    {
        printf("id%d\n",id);
        printf("child id%d\n",getpid());
        printf("parent id%d\n",getppid());
    }
}