免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
论坛 程序设计 C/C++ 进程
12下一页
最近访问板块 发新帖
查看: 1696 | 回复: 11
打印 上一主题 下一主题

进程 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-10-12 17:04 |只看该作者 |倒序浏览
#include <stdio.h>;
#include <stdlib.h>;
#include <string.h>;
#include <unistd.h>;

main(void)
{
        pid_t    child_1,child_2,child_3;
       
       
        if((child_1=fork())==-1)
        {
                printf("FORK ERROR:%d\n",child_1);
                exit(0);
        }
        else{
               
                /*一些操作*/
                exit(1);
        }
       
        if((child_2=fork())==-1)
        {
                printf("FORK ERROR:%d\n",child_2);
               
                exit(0);
        }
        else{
                /*一些操作*/
                exit(1);
        }
       
        if((child_3=fork())==-1)
        {
                printf("FORK ERROR:%d\n",child_3);
                exit(0);
        }
        else{
                /*一些操作*/
                exit(1);
        }
       
}
问一下各位! 进程能这么用吗/??     如果在主程序里申请多个进程一起操作? 要怎么写?要注意些什么?

论坛徽章:
0
2 [报告]
发表于 2003-10-12 17:14 |只看该作者

进程

你的代码运行过吗?
网上编程的资料很多,google下
可以看看
  1. http://www.neweasier.com/article/2002-08-07/1028710692.html
复制代码

论坛徽章:
0
3 [报告]
发表于 2003-10-12 20:48 |只看该作者

进程

编译过啊! 能过去! 但是结果不对!  进程都没做操作!
这样写,3个进程是并列的吗?

论坛徽章:
0
4 [报告]
发表于 2003-10-13 00:21 |只看该作者

进程

在你创建第一个进程的时候,如下

  1. if((child_1=fork())==-1)
  2. {
  3. printf("FORK ERROR:%d\n",child_1);
  4. exit(0);
  5. }
  6. else{

  7. /*一些操作*/
  8. exit(1);
  9. }
复制代码

父进程就已经退出了,
后面的都没有执行的,
当然不会有正确结果了。
fork不返回-1的情况下
按你的程序流程,
父进程不就直接退出了吗!
fork()成功后在父进程中返回的是子进程的pid呀,
肯定不是-1的,按你的流程一定会直接退出的!

论坛徽章:
0
5 [报告]
发表于 2003-10-13 09:18 |只看该作者

进程

同意楼上的

  1.    child_pid = fork() ;
  2.    if(child_pid < 0){
  3.       /*错误处理*/
  4.   }else if (child_pid == 0){
  5.      /*子进程代码*/
  6.   }else{
  7.      /* 父进程代码*/
  8. }
复制代码

一般都这么用。

论坛徽章:
0
6 [报告]
发表于 2003-10-13 11:22 |只看该作者

进程

晕哦,,居然范这样的错误,,你再程序里添加几个打印语句看看程序的流程,一查就出来了~~

论坛徽章:
0
7 [报告]
发表于 2003-10-13 11:34 |只看该作者

进程

谢谢各位! 我是个新手!这是我自己看书第一次使用‘进程’
我很笨,但是我很执着!

请各位听听小弟对各位回副的理解,看看对不对:
if((child_2=fork())==-1)
这种情况是进程申请失败,
if((child_2=fork())==0)
得到子进程,以后的操作是对子进程的!
if((child_2=fork())>;0的其他值
回到主进程!

是这样吗?各位!  万分感谢!

论坛徽章:
0
8 [报告]
发表于 2003-10-13 12:29 |只看该作者

进程

针对以上各位的说发:我这样写行吗?
main()
{
        pid_t    child_1,child_2,child_3;
        time_t        t_time1,t_time2;
        char        file_file[64];
        int    ii;
        time(&t_time1);
       
       
        if((child_1=fork())==-1)
        {
                printf("FORK ERROR:%d\n",child_1);
                exit(0);
        }
        else if(child_1==0){
                /*操作*/
               
                exit(1);
        }
        else {
                if((child_2=fork())==-1)
                {
                        printf("FORK ERROR:%d\n",child_2);
               
                        exit(0);
                }
                else if(child2==0){
                        /*操作*/
                        exit(2);
                }
                else {
                        /*操作*/
               }
        }
       
}

我测了,不行! 还是不理解!
请多批评!

论坛徽章:
0
9 [报告]
发表于 2003-10-13 14:20 |只看该作者

进程

不知道你在什么环境下测的,我在solaris上测了,按照你上面的写法是可以的。源程序:
#include<stdio.h>;
#include<unistd.h>;
#include<stdlib.h>;
#include<time.h>;

main()
{
        pid_t child_1,child_2,child_3;
        time_t t_time1,t_time2;
        char file_file[64];
        int ii;
        time(&t_time1);


        if((child_1=fork())==-1)
        {
                printf("FORK ERROR:%d\n",child_1);
                exit(0);
        }
        else if(child_1==0){
                /*操作*/
                printf("child_1,first\n";
                sleep(1);
                printf("child_1,second\n";
                sleep(3);
                printf("child_1 third\n";
                exit(1);
        }
        else {
                if((child_2=fork())==-1)
                {
                        printf("FORK ERROR:%d\n",child_2);
                        exit(0);
                }
                else if(child_2==0){
                        /*操作*/
                        printf("child_2 first\n";
                        sleep(2);
                        printf("child_2 second\n";
                        sleep(1);
                        printf("child_2 third\n";
                        exit(2);
                }
                else {
                        /*操作*/
                        printf("parent\n";
                        sleep(6);
                }
        }

}

第一次输出为:
child_1,first
child_2 first
parent
child_1,second
child_2 second
child_2 third
child_1 third
第二次输出为:
parent
child_1,first
child_2 first
child_1,second
child_2 second
child_2 third
child_1 third
由多次结果看出,子进程1和子进程2是同时的。

论坛徽章:
0
10 [报告]
发表于 2003-10-13 15:01 |只看该作者

进程

我是在ibm的aix下测的!  他根本就不做我要的操作!
不知道怎么回事!
着急啊! 
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP