#include<stdio.h>
#include<sys/types.h>
#include<unistd.h>
int main()
{
int p1,p2;
while((p1=fork())<0);
if(p1==0)
putchar('a');
else
{
while((p2=fork())<0);
if(p2==0)
putchar('b');
else putchar('c'); //返回父进程要做的工作
}
return 1;
}
这个程序父进程 、子进程分别是怎么运行的,希望各位大虾分析一些~
关于fork()系统调用
- q_forest
- 帖子: 3
- 注册时间: 2009-04-25 7:56
-
- 帖子: 37
- 注册时间: 2009-06-27 23:33
- cnkilior
- 论坛版主
- 帖子: 4984
- 注册时间: 2007-08-05 17:40
Re: 关于fork()系统调用
父子进程运行的先后顺序完全不可预测,在系统负载低的情况下可以用sleep来等待,或用waitpid/wait函数。
#include <sys/types.h>
#include <sys/wait.h>
pid_t wait(int *status);
pid_t waitpid(pid_t pid, int *status, int options);
int waitid(idtype_t idtype, id_t id, siginfo_t *infop, int options);
#include <sys/types.h>
#include <sys/wait.h>
pid_t wait(int *status);
pid_t waitpid(pid_t pid, int *status, int options);
int waitid(idtype_t idtype, id_t id, siginfo_t *infop, int options);
- cnkilior
- 论坛版主
- 帖子: 4984
- 注册时间: 2007-08-05 17:40
Re: 关于fork()系统调用
不危险,成功fork就条出来了。。
- BigSnake.NET
- 帖子: 12522
- 注册时间: 2006-07-02 11:16
- 来自: 廣州
- 联系:
Re: 关于fork()系统调用
fork 就是分枝,分叉,一个变两个q_forest 写了:#include<stdio.h>
#include<sys/types.h>
#include<unistd.h>
int main()
{
int p1,p2;
while((p1=fork())<0);
if(p1==0)
putchar('a');
else
{
while((p2=fork())<0);
if(p2==0)
putchar('b');
else putchar('c'); //返回父进程要做的工作
}
return 1;
}
这个程序父进程 、子进程分别是怎么运行的,希望各位大虾分析一些~
^_^ ~~~
要理解递归,首先要理解递归。
地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。
要理解递归,首先要理解递归。
地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。
- q_forest
- 帖子: 3
- 注册时间: 2009-04-25 7:56
Re: 关于fork()系统调用
为什么新fork出来的子进程p1没有执行后面的while((p2=fork())<0); 从而继续创建一新的进程?BigSnake.NET 写了:fork 就是分枝,分叉,一个变两个q_forest 写了:#include<stdio.h>
#include<sys/types.h>
#include<unistd.h>
int main()
{
int p1,p2;
while((p1=fork())<0);
if(p1==0)
putchar('a');
else
{
while((p2=fork())<0);
if(p2==0)
putchar('b');
else putchar('c'); //返回父进程要做的工作
}
return 1;
}
这个程序父进程 、子进程分别是怎么运行的,希望各位大虾分析一些~
- bones7456
- 帖子: 8495
- 注册时间: 2006-04-12 20:05
- 来自: 杭州
- 联系:
- Junglevass
- 帖子: 507
- 注册时间: 2009-07-16 10:11