多进程测试(课上测试)

发布时间 2023-11-27 14:59:07作者: 20211116彭玮琪
  1. 编写程序 rxx(xx为你学号后两位), rxx -o 生成并打印一个奇数随机数,rxx -e 生成并打印一个偶数随机数。提交代码和运行结果截图。

    点击查看代码
    #include <stdio.h>
    #include <stdlib.h>
    int main(int argc, char *argv[]) {
        int num;
        int flag;
        if (argc != 3) {
         printf("Usage: %s -o <output_file> -e <output_file>\n", argv[0]);
            return 1;
        }
        flag = argv[1][1];
        srand(time(NULL));
        num = rand() % 100;
        switch (flag) {
          case 'o':
             if(num % 2 ==0) num++;
             break;
         case 'e':
             if(num % 2 ==1) num++;
             break;
         default:
             printf("Invalid flag\n");
             return 1;
       }
       printf("Random number: %d\n", num);
       return 0;
    }
    

image

  1. 编写一个多进程程序,父进程通过调用exec和rxx 打印奇数随机数,同时打印自己PID,子进程通过调用exec和rxx 打印奇数随机数,同时打印PPID和PID,提交代码和运行结果截图。

    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
    int main(int argc, char *argv[]) {
       int pid, ppid;
       if (argc != 2) {
           printf("Usage: %s [-p <parent_pid>\n", argv[0]);
           return 1;
       }
       pid = getpid();
       ppid = getppid();
       printf("PID: %d, PPID: %d\n", pid, ppid);
       if (strcmp(argv[1], "r16") == 0) {
           printf("Random number: %d\n", rand() % 100 + 1);
       } else if (strcmp(argv[1], "exec") == 0) {
           execl("/bin/sh", "sh", "-c", "echo 'Hello from exec!'");
       } else {
           printf("Invalid argument\n");
           return 1;
       }
       return 0;
    }
    

image