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

NeilHappy 2012-05-16 06:23:49
fork创建的新的进程是从fork返回的地方开始运行,而不是从开头运行。下面的代码:

#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;
}

编译执行后

Before:my pid is 5495
After:my pid is 5495,fork() said 5496
After:my pid is 5496,fork() said 0

我把ret_from_fork初始化为111。为什么最后一行,fork() said ret_from_fork会是0?这里该如何理解新进程从fork返回的地方开始运行?
...全文
111 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
NeilHappy 2012-05-17
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

fork()在子进程中返回0,在父进程中返回子进程的pid。
[/Quote]
明白了,谢谢了。
buzzerrookie 2012-05-16
  • 打赏
  • 举报
回复
fork()在子进程中返回0,在父进程中返回子进程的pid。
Arnold9009 2012-05-16
  • 打赏
  • 举报
回复
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来判断当前是父进程,还是子进程,然后根据判断结果执行不同的代码

23,116

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧