首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 操作系统 > UNIXLINUX >

关于fork创建进程的一个有关问题

2012-05-27 
关于fork创建进程的一个问题fork创建的新的进程是从fork返回的地方开始运行,而不是从开头运行。下面的代码:

关于fork创建进程的一个问题
fork创建的新的进程是从fork返回的地方开始运行,而不是从开头运行。下面的代码:

C/C++ code
#include <stdio.h>#include <unistd.h>int main(){        int ret_from_fork=111,mypid;        mypid=getpid();        printf("Before:my pid is %d\n",mypid);        ret_from_fork=fork();        sleep(1);        printf("After:my pid is %d,fork() said %d\n",getpid(),ret_from_fork);        return 0;}

编译执行后
C/C++ code
Before:my pid is 5495After:my pid is 5495,fork() said 5496After:my pid is 5496,fork() said 0

我把ret_from_fork初始化为111。为什么最后一行,fork() said ret_from_fork会是0?这里该如何理解新进程从fork返回的地方开始运行?

[解决办法]
After:my pid is 5496,fork() said 0 这一行是子进程打印的

After:my pid is 5495,fork() said 5496 这一行是父进程打印的

执行ret_from_fork=fork();后,父子进程中ret_from_fork的值是不同的,后续的代码父子进程都会执行;

一般的做法是根据ret_from_fork来判断当前是父进程,还是子进程,然后根据判断结果执行不同的代码
[解决办法]
fork()在子进程中返回0,在父进程中返回子进程的pid。

热点排行