如何区分一个子进程与其他子进程

迪伦·斯蒂尔(Dylan Steele)

我有一个课堂作业,对这部分要求感到困惑。因此,我们需要制作一个具有n个进程的多进程字计数器,并且n将成为程序的输入参数。每个进程都需要对输入文件的选定部分进行自己的最小字数计数。因此,基本上,输入的文件将被分为1 / n个部分,并在n个进程之间进行分割。

我了解如何通过for循环派生进程,以及如何使用管道将子进程中的最小字数发送到父进程,但是我不确定如何告诉某个进程执行输入文件的选择部分。

您会使用它们的PID值来检查它们要分配给哪个进程,然后为其分配任务吗?

到目前为止,这是我的代码。

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

#define MSGLEN  64
#define MESSES  3

int main(){
int     fd[2];
pid_t   pid;
int     result;

//Creating a pipe
result = pipe (fd);
if (result < 0) {
    //failure in creating a pipe
    perror("pipe error\n");
    exit (1);
}

//Creating a child process
for(int i = 0; i < MESSES; i++){
if ((pid = fork()) < 0) {
     //failure in creating a child
     perror ("fork error\n");
     exit(2);
    }
if(pid == 0)
   break;
}

if (pid == 0) {
    // ACTUALLY CHILD PROCESS
     char message[MSGLEN];

        //Clearing the message
        memset (message, 0, sizeof(message));
        printf ("Enter a message: ");
        //scanf ("%s",message);

        fgets (message, 1024, stdin);
    close(fd[0]);   

        //Writing message to the pipe
        write(fd[1], message, strlen(message));

        close(fd[1]);
    close(fd[0]);
        exit (0);
}
else {
    //Parent Process

     char message[MSGLEN];
 char *ptr;
 long wc;
 close(fd[1]);

     while (1) {
                //Clearing the message buffer
                memset (message, 0, sizeof(message));

                //Reading message from the pipe

                if(read(fd[0], message, sizeof(message)) == 0)
        exit(0);
                printf("Message entered %s\n",message);
                /*
                Message entered needs to be in the format of number first space then string for it to work
                */

                wc = 0;

                wc = strtol(message, &ptr, 10);
                printf("The number(unsigned long integer) is %ld\n", wc);
                printf("String part is %s", ptr);



        }
    close(fd[0]);
    wait(NULL);
       // exit(0);
 }
 return 0;
}
哈利

使用fork时要记住的关键是,父级和子级共享相同的内存,并将父级拥有的所有内容的副本传递给子级。此时,孩子已经分叉了父母的数据

在下面的代码中,我们在计算我们创建了多少个进程。您可以将其用作子代中的参数,即第n个子代获得值n

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>

#define PROCESS_COUNT 50

int main(void) {
  pid_t pid;
  size_t pid_count = 0;
  //pid_t  pid_array[PROCESS_COUNT];
  for(int i = 0; i < PROCESS_COUNT; i++) {
    if ((pid = fork()) < 0) {
      perror ("fork error\n");
      exit(2);
    }   
    if (pid == 0) {//child
      size_t n = 0;
      size_t p = getpid();
       while(n++ < 2) {
         //Next line is illustration purposes only ie I'm taking liberties by
         //printing a pid_t value
         printf("child %zu  has pid_count == %zu\n", p, pid_count);
         sleep(1);
       }   
       exit (0);
    }   
    else {
      //Count how many process we've created.
      pid_count++;
      int status;
      waitpid( -1, &status, WNOHANG);
    }   
  }
  wait(NULL);
  return 0;
}

如果您真的想花哨的话,可以通过管道或共享内存使用IPC。有很多方法可以将数据从一个进程获取到另一个进程,有时像临时文件这样简单的事情就绰绰有余了。对于您的问题,我将使用mmap,但不必那么复杂

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

当另一个子进程完成时,如何终止子进程?

来自分类Dev

使用python multiprocessing子进程如何终止另一个子进程?

来自分类Dev

父进程有多个子进程,而两个子进程有一个子进程

来自分类Dev

我如何等待除一个子进程之外的所有子进程完成

来自分类Dev

在Electron中产生一个子进程

来自分类Dev

如何将Apache配置为仅派生一个子进程/工人?

来自分类Dev

如何避免systemctl停止停止我的一个子进程?

来自分类Dev

如何在python中杀死一个子进程

来自分类Dev

子进程如何杀死其他子进程然后终止?

来自分类Dev

为什么我的第一个子进程没有收到他父母的信号

来自分类Dev

把一个函数变成一个子进程——STUCK

来自分类Dev

在不离开孤儿的情况下从python / bash杀死一个子子进程

来自分类Dev

Python杀死一个子进程(启动另一个进程)并再次启动

来自分类Dev

单击一个子元素时如何隐藏所有其他元素

来自分类Dev

我如何获得一个子进程来每5秒暂停一次外部程序的执行?

来自分类Dev

使用子进程的stdout作为另一个进程的stdin时,有时数据不会传递给第二个子进程

来自分类Dev

Windows cmd .bat-启动一个子进程,该进程同时运行到父进程,并在父进程关闭时关闭

来自分类Dev

Windows cmd .bat-启动一个子进程,该进程同时运行到父进程,并在父进程关闭时关闭

来自分类Dev

如何使用CSS影响一个子元素而不影响其他子元素的宽度

来自分类Dev

如何将数据从一个子组件传递给父组件和其他子组件?

来自分类Dev

当第一个子进程退出,然后父进程退出而不调用wait时会发生什么?

来自分类Dev

在node.js中生成一个子进程,数据未定义

来自分类Dev

在node.js中生成一个子进程

来自分类Dev

Python:等待第一个子进程完成

来自分类Dev

为什么`login`和`sudo`派生一个子进程,而不是立即执行exec()?

来自分类Dev

如何并行产生五个子进程

来自分类Dev

如何运行2个子进程,但在C中先运行一个又一个?

来自分类Dev

如何减少Linux上一个进程的所有线程(和子进程)?

来自分类Dev

如何减少Linux上一个进程的所有线程(和子进程)?

Related 相关文章

  1. 1

    当另一个子进程完成时,如何终止子进程?

  2. 2

    使用python multiprocessing子进程如何终止另一个子进程?

  3. 3

    父进程有多个子进程,而两个子进程有一个子进程

  4. 4

    我如何等待除一个子进程之外的所有子进程完成

  5. 5

    在Electron中产生一个子进程

  6. 6

    如何将Apache配置为仅派生一个子进程/工人?

  7. 7

    如何避免systemctl停止停止我的一个子进程?

  8. 8

    如何在python中杀死一个子进程

  9. 9

    子进程如何杀死其他子进程然后终止?

  10. 10

    为什么我的第一个子进程没有收到他父母的信号

  11. 11

    把一个函数变成一个子进程——STUCK

  12. 12

    在不离开孤儿的情况下从python / bash杀死一个子子进程

  13. 13

    Python杀死一个子进程(启动另一个进程)并再次启动

  14. 14

    单击一个子元素时如何隐藏所有其他元素

  15. 15

    我如何获得一个子进程来每5秒暂停一次外部程序的执行?

  16. 16

    使用子进程的stdout作为另一个进程的stdin时,有时数据不会传递给第二个子进程

  17. 17

    Windows cmd .bat-启动一个子进程,该进程同时运行到父进程,并在父进程关闭时关闭

  18. 18

    Windows cmd .bat-启动一个子进程,该进程同时运行到父进程,并在父进程关闭时关闭

  19. 19

    如何使用CSS影响一个子元素而不影响其他子元素的宽度

  20. 20

    如何将数据从一个子组件传递给父组件和其他子组件?

  21. 21

    当第一个子进程退出,然后父进程退出而不调用wait时会发生什么?

  22. 22

    在node.js中生成一个子进程,数据未定义

  23. 23

    在node.js中生成一个子进程

  24. 24

    Python:等待第一个子进程完成

  25. 25

    为什么`login`和`sudo`派生一个子进程,而不是立即执行exec()?

  26. 26

    如何并行产生五个子进程

  27. 27

    如何运行2个子进程,但在C中先运行一个又一个?

  28. 28

    如何减少Linux上一个进程的所有线程(和子进程)?

  29. 29

    如何减少Linux上一个进程的所有线程(和子进程)?

热门标签

归档