多进程测试

任务详情
推荐在OpenEuler中实现

1. 编写程序 rxx(xx为你学号后两位), rxx  -o  生成并打印一个奇数随机数,rxx  -e  生成并打印一个偶数随机数。提交代码和运行结果截图。
2. 编写一个多进程程序,父进程通过调用exec和rxx 打印奇数随机数,同时打印自己PID,子进程通过调用exec和rxx 打印奇数随机数,同时打印PPID和PID,提交代码和运行结果截图。

代码如下:
复制代码
#include <stdlib.h>
#include <time.h>
#include <stdio.h>
#include <string.h>
int main(int argc,char *argv[])
{
    char *o = "-o";
    char *e = "-e";
    int a;
    
    printf("\n");
    //随机种子
    srand((unsigned int)time(NULL));
    for(int i = 0;i < 10 ;i ++)
    {
        if(strcmp(argv[1], o)==0)
        {
            a=rand()%101;
            if(a%2!=0)
            {
                printf("jishu is %d\n",a);
                break;
            }
            //printf("%d ",rand()%101);//生成0~100之间
        }
        
        else if(strcmp(argv[1], e)==0)
        {
            a=rand()%101;
            if(a%2==0)
            {
                printf("oushu is %d\n",a);
                break;
            }
            //printf("%d ",rand()%101);//生成0~100之间
        }
        else{
            printf("none!");
        }
        //printf("%d ",rand()%101 - 50);//生成-50~50之间
    }    
    
    printf("\n");
    return 0;
}
复制代码

运行截图:

 

 代码如下:

复制代码
#include <stdlib.h>
#include <time.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
int main(int argc, char *argv[])
{
    char *o = "-o";
    char *e = "-e";
    int a;
    int fork_rv;

    printf("\n");
    //随机种子
    srand((unsigned int)time(NULL));
    printf("Before: my pid is %d\n", getpid());

    fork_rv = fork();
    
    for (int i = 0; i < 10; i++)
    {
        if (fork_rv == 0)
        {
           
            if (strcmp(argv[1], o) == 0)
            {
                 
                a = rand() % 101;
                if (a % 2 != 0)
                {
                    printf("I am the child.  my pid=%d\n", getpid());
                    printf("jishu is %d\n", a);
                    break;
                }
            }
            else
            {
                    printf("child none!");
                    exit(0);
                }
                
                // printf("%d ",rand()%101);//生成0~100之间
            
        }

        else if (fork_rv != 0 && fork_rv != -1)
        {
            
            if (strcmp(argv[1], e) == 0)
            {

                a = rand() % 101;
                if (a % 2 == 0)
                {
                    printf("I am the parents.  my pid=%d\n", getpid());
                    printf("oushu is %d\n", a);
                    break;
                }
                // printf("%d ",rand()%101);//生成0~100之间
            }
            else
            {
                printf("parents none!");
                 exit(0);
            }
            // printf("%d ",rand()%101 - 50);//生成-50~50之间
        }
        else{
            perror("fork");
        }    /* check for error    */
        
    }

    printf("\n");
    return 0;
}
复制代码

运行结果如图:

 

 

 

posted @   20201208史逸霏  阅读(38)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示