Как отобразить дочерние процессы, используя pstree в C - PullRequest
1 голос
/ 29 апреля 2019

быстрый вопрос, который мне задали о создании программы, в которой один процесс генерирует 32 дочерних процесса.Я создал программу ниже (это правильно?), Но знаете ли вы, как я могу с помощью команды pstree представить дерево этих процессов?Цени любую помощь.

#int main()
{
    for(int i = 0; i < 32; ++i)
    {
        if(fork() == 0)
        {
            sleep(5);
            return 0;
        }
    }
    for(int i = 0; i < 32; ++i)
    {
        waitpid(-1, NULL, 0);
    }
    return 0;
}: 

1 Ответ

0 голосов
/ 29 апреля 2019

Для меня это работает после добавления нескольких #include строк, например:

#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
int main() {
  for(int i = 0; i < 32; ++i) {
    if(fork() == 0) {
      sleep(30);
      return 0;
    }
  }
  for(int i = 0; i < 32; ++i)
    waitpid(-1, NULL, 0);
  return 0;
}

Тогда я могу скомпилировать:

gcc pp.c -o myprog

, который генерирует исполняемый файл myprog. Затем я запускаю его, и пока он работает, я могу открыть другое окно терминала и запустить там pstree, затем он показывает родительский процесс и 32 дочерних процесса, он выглядит примерно так:

systemd-+-[...]
        |-[...other stuff...]
        |-systemd-+-(sd-pam)
        |         |-[...other stuff...]
        |         |-gnome-terminal--+-bash---myprog---32*[myprog]
        |         |                 |-bash---pstree
        |         |                 `-4*[{gnome-terminal-}]
        |         |-[...other stuff...]

Я предполагаю, что часть bash---myprog---32*[myprog] означает, что процесс myprog создал 32 дочерних myprog процесса, поэтому он, кажется, работает как ожидалось.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...