叉树C程序

时间:2017-04-14 20:53:43

标签: c fork

我正在尝试创建fork树图,但仍然没有成功。这是我的代码:

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>

void procStatus(int level) {
   printf("L%d: PID[%d] (PPID[%d])\n", level, getpid(), getppid());
   fflush(NULL);
}

void levelFork(int *level) {
   if (fork() == 0)
      (*level)++;
   wait(NULL);
}

void main() {
   int level = 0;
   procStatus(level);
   levelFork(&level);
   procStatus(level);
}

我想创建如下图:

Fork Tree Diagram

输出如下:

Output

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:2)

代码将是这样的,你应该为每个新的子进程分叉两个子进程,直到达到目标深度级别,在分叉两个子进程后,父进程必须退出系统,只有新进程才能创建新的进程,

您可以通过查看childpid(fork的返回值)

来丢弃父进程
└──╼ $./fork.o 2
i:3 process ID:23913 parent ID:23911 child ID:0
i:3 process ID:23915 parent ID:23911 child ID:0
i:3 process ID:23914 parent ID:23912 child ID:0
i:3 process ID:23916 parent ID:23912 child ID:0
i:2 process ID:23911 parent ID:23910 child ID:23915
i:2 process ID:23912 parent ID:23910 child ID:23916
i:1 process ID:23910 parent ID:23277 child ID:23912

代码的输出是这个

ActivityManager actvityManager = (ActivityManager)
this.getSystemService( ACTIVITY_SERVICE );
List<RunningAppProcessInfo> procInfos = actvityManager.getRunningAppProcesses();

答案 1 :(得分:0)

您需要一种指定最大深度的方法,然后使用它来分叉新进程。完成分叉后,您可以开始打印。下面的代码段可以正常工作

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>

void procStatus(int level) {
   printf("L%d: PID[%d] (PPID[%d])\n", level, getpid(), getppid());
   fflush(NULL);
}

void levelFork(int *level,int maxlevel) {
  int locallevel= *level;
   while(locallevel!=maxlevel){
      int pid = fork();
      if (pid  == 0){
         (*level)++; // childs level is higher
         levelFork(level,maxlevel);
         return;
      }
     locallevel++;
     wait(NULL);
   }
}

void main() {
        int level = 0;
        int maxlevel=3;

        levelFork(&level,maxlevel);
        procStatus(level);
}