Linux中fork同时创建多个子进程的方法(二)
来源:互联网 发布:php设计模式 编辑:程序博客网 时间:2024/05/23 20:48
原文地址:http://www.cnblogs.com/hanyan225/archive/2011/07/22/2113606.html
怎么创建多个进程呢?我说那还不容易,看下边代码:
//省略必要头文件
int main()
{
pid_t pid[2];
int i;
printf("This is %d\n",getpid());
for(i = 0;i < 2;i++ ){
if((pid[0] = fork()) < 0){
printf("Fork() Error!");
exit(-1);
}
if(pid[0] == 0)
printf("This is parent %d,child is %d\n",getppid(),getpid());
else
wait(5);
}
return 0;
}
好,这段代码还是挺简单的,我们的意思是:主线程通过循环创建2个子进程,这时系统中的总进程数应该是3,看看输出结果吧:
这个结果图看的效果不好,我们看个直接点的:
这下你明白了吧,问题没有想象中的那样简单,父进程现在标号为1的循环中创了一个子进程,然后第二次循环,前边的第一个子线程又创建一个子进程,这时明显系统中有四个进程,还是不懂?在下边的时序图吧:
这下你应该明白了吧,好了问题知道了,怎么解决,方法有二;
方法一:直接看代码 for循环
void createsubprocess(int num)
{
pid_t pid;
int i;
for(i=0;i<num;i++)
{
pid=fork();
if(pid==0||pid==-1) //子进程或创建进程失败均退出,这里是关键所在
{
break;
}
}
if(pid==-1)
{
perror("fail to fork!\n");
exit(1);
}
else if(pid==0)
{
printf("子进程id=%d,其对应的父进程id=%d\n",getpid(),getppid());
exit(0);
}
else
{
printf("父进程id=%d\n",getpid());
exit(0);
}
}
这种方法的关键就在于每次循环时,如果发现是子进程就直接从创建子进程的循环中跳出来,不让你进入循环,这样就保证了每次只有父进程来做循环创建子进程的工作。
方法二:直接看代码递归函数
void createsubprocess(int num,int max)
{
if(num>=max)return;
pid=fork();
if(pid<0)
{
perror("fork error!\n");
exit(1);
}
//子进程
else if(pid==0)
{
sleep(3);
printf("子进程id=%d,父进程id=%d\n",getpid(),getppid());
}
//父进程
else
{
num++;
if(num==1)printf("父进程id=%d\n",getpid());
if(num<max)createsubprocess(num,max);
//此处加sleep是为了防止父进程先退出,从而产生异常
sleep(5);
}
}
这里的关键在于递归操作,只有父进程才进入递归创建子进程,子进程不进行这样的操作。
原文地址:http://www.cnblogs.com/hanyan225/archive/2011/07/22/2113606.html
怎么创建多个进程呢?我说那还不容易,看下边代码:
//省略必要头文件
int
{
}
好,这段代码还是挺简单的,我们的意思是:主线程通过循环创建2个子进程,这时系统中的总进程数应该是3,看看输出结果吧:
这个结果图看的效果不好,我们看个直接点的:
这下你明白了吧,问题没有想象中的那样简单,父进程现在标号为1的循环中创了一个子进程,然后第二次循环,前边的第一个子线程又创建一个子进程,这时明显系统中有四个进程,还是不懂?在下边的时序图吧:
这下你应该明白了吧,好了问题知道了,怎么解决,方法有二;
void
{
}
void
{
}
- linux中fork同时创建多个子进程的方法
- linux中fork同时创建多个子进程的方法(二)
- Linux中fork同时创建多个子进程的方法(二)
- linux中fork同时创建多个子进程的方法(一)
- linux中fork同时创建多个子进程的方法(一)
- Fork同时创建多个子进程方法
- fork同时创建多个子进程的方法
- 进程控制:linux中fork同时创建多个子进程注意事项
- linux中fork同时创建多个子…
- linux中创建多个子进程的方法
- 通过实例体会 fork()同时创建多个子进程
- linux下一次性fork多个子进程方法
- linux同时创建多进程的方法
- Linux 创建多个子进程
- linux创建进程fork的方法步骤
- linux 操作系统 创建多个子进程
- 一个进程 fork 多个子进程
- 【Linux】进程的创建fork()
- Android 摇一摇功能的实现
- 网络编程Server端 --- Linux版
- A prepared statement is generated from a nonconstant String
- Alexa图参数说明
- 日本人談qemu的內存訪問的文章
- Linux中fork同时创建多个子进程的方法(二)
- 变化检测算法
- 关闭应用
- Channel Model in 36.104
- WPF TreeView 的数据绑定(分层)
- word & visio
- Delphi 显示选择文件夹对话框 (有新建按钮)
- virtual base class
- linux内核代码数量增长情况