当前位置: 技术问答>linux和unix
求教fork
来源: 互联网 发布时间:2016-07-10
本文导语: #include #include #include #include int main(void) { pid_t result; result = fork(); if(result == -1) { perror("fork"); exit; } else if(result == 0) { printf("The return value is %dn In child process!!n My PID is %dn",result,getpid()); } else...
#include
#include
#include
#include
int main(void)
{
pid_t result;
result = fork();
if(result == -1)
{
perror("fork");
exit;
}
else if(result == 0)
{
printf("The return value is %dn In child process!!n My PID is %dn",result,getpid());
}
else
{
printf("The return value is %dn In father process!!n My PID is %dn",result,getpid());
}
}
运行结果为什么是
The return value is 0
In child process!!
My PID is 2280
The return value is 2280
In father process!!
My PID is 2879
我看了fork的返回值等内容,还是不明白,帮忙解释一下,谢谢~~
#include
#include
#include
int main(void)
{
pid_t result;
result = fork();
if(result == -1)
{
perror("fork");
exit;
}
else if(result == 0)
{
printf("The return value is %dn In child process!!n My PID is %dn",result,getpid());
}
else
{
printf("The return value is %dn In father process!!n My PID is %dn",result,getpid());
}
}
运行结果为什么是
The return value is 0
In child process!!
My PID is 2280
The return value is 2280
In father process!!
My PID is 2879
我看了fork的返回值等内容,还是不明白,帮忙解释一下,谢谢~~
|
1、在父进程里面调用fork()以后,会创建一个子进程,这样就会有两个进城了,对吧?
2、从fork()那个点开始,父子进程就要区分了,区分的方法就是,子进程里面fork()返回0;父进程里面返回子
进程的ID。之所以这样设计是因为,任何一个进程都可以调用getpid()得到自己的ID,而父进程要得到子进程的
ID,就只能靠fork()的返回值了。
3、由2之,在fork()后的代码只要简单判断fork()的返回值,就可以区分出来两条路径了,一种是父进程继续运
行的路径,一条是子进程运行的路径
2、从fork()那个点开始,父子进程就要区分了,区分的方法就是,子进程里面fork()返回0;父进程里面返回子
进程的ID。之所以这样设计是因为,任何一个进程都可以调用getpid()得到自己的ID,而父进程要得到子进程的
ID,就只能靠fork()的返回值了。
3、由2之,在fork()后的代码只要简单判断fork()的返回值,就可以区分出来两条路径了,一种是父进程继续运
行的路径,一条是子进程运行的路径
|
补充一下:当程序顺序执行到fork指令时,操作系统会产生一个新进程(原进程的子进程),这时,父子进程是相互独立的,各自完成各自的任务,互不干扰。就好像细胞分裂一样。
|
"if(result == 0)
{
printf("The return value is %dn In child process!!n My PID is %dn",result,getpid());
} "——这就是子进程做的工作
“else
{
printf("The return value is %dn In father process!!n My PID is %dn",result,getpid());
}”——这是父进程所作的工作。
{
printf("The return value is %dn In child process!!n My PID is %dn",result,getpid());
} "——这就是子进程做的工作
“else
{
printf("The return value is %dn In father process!!n My PID is %dn",result,getpid());
}”——这是父进程所作的工作。
|
都走,但是因为fork返回值result是不同的,所以它们不会走相同的路径
|
这个貌似已经说的很清楚了
|
fork就是产生子进程,产生成功返回子进程id,返回失败的话返回-1,而子进程id在父进程中显示为一个数字,在子进程中为0而已,好了吧,简直就是英文翻译