当前位置: 技术问答>linux和unix
关于fork创建进程的一个问题
来源: 互联网 发布时间:2017-02-23
本文导语: fork创建的新的进程是从fork返回的地方开始运行,而不是从开头运行。下面的代码: #include #include int main() { int ret_from_fork=111,mypid; mypid=getpid(); printf("Before:my pid is %dn",mypid);...
fork创建的新的进程是从fork返回的地方开始运行,而不是从开头运行。下面的代码:
编译执行后
我把ret_from_fork初始化为111。为什么最后一行,fork() said ret_from_fork会是0?这里该如何理解新进程从fork返回的地方开始运行?
#include
#include
int main()
{
int ret_from_fork=111,mypid;
mypid=getpid();
printf("Before:my pid is %dn",mypid);
ret_from_fork=fork();
sleep(1);
printf("After:my pid is %d,fork() said %dn",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返回的地方开始运行?
|
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来判断当前是父进程,还是子进程,然后根据判断结果执行不同的代码
After:my pid is 5495,fork() said 5496 这一行是父进程打印的
执行ret_from_fork=fork();后,父子进程中ret_from_fork的值是不同的,后续的代码父子进程都会执行;
一般的做法是根据ret_from_fork来判断当前是父进程,还是子进程,然后根据判断结果执行不同的代码
|
fork()在子进程中返回0,在父进程中返回子进程的pid。