【问题标题】:Is program count everything right with fork and processes?程序是否使用 fork 和进程计算一切正确?
【发布时间】:2022-01-13 00:42:13
【问题描述】:

我只需要知道我是否正确。在将要进行一次循环切换之前使用这个 forks(),进程数应该是 5 对吧?如果我要添加更多的 forks(),这个数字会增加到 9,17 等?在这种情况下,我很清楚这个进程是如何创建新进程的,下一个 forks() 是否也只从子进程或父进程创建新进程,因为我无法正确绘制它,因为我不知道如何检查创建新进程的进程那些。 也许这是一个显而易见的问题,但我想我错过了一些东西,我想确保我能很好地理解它。

谢谢!

Is it gonna look like this? (i made a draw)

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

void processTree()
{
    pid_t pid_t = getpid();
    int tmp = pid_t;
    printf("PID : %d\n",pid_t);
    char buffer [128];

    for(int i = 0; i < 1; i++)
    {
        int pid_child;
        fork();
        fork(); //if i am gonna add more fork there will be 9,17,etc processes?
        switch(pid_child = fork())
        {
        case -1:
            exit(-1);
        case 0:
            pid_t = pid_child;
            
            
            printf("UID: %d, GID: %d, PID: %d, PPID: %d\n", getuid(), getgid(), getpid(), getppid()); fflush(stdout);
            break;
        
        }
    

 }

int main()
{
    processTree();
    return 0;
}

【问题讨论】:

  • 不要为 C 问题标记 C++。
  • 对不起,我的错...
  • 贴出的代码无法编译!请发布可编译的代码
  • 它正在为我编译...

标签: c fork


【解决方案1】:

for 循环迭代一次,因此无关紧要。节目从一个进程开始,即执行main() 的进程,它执行一个

fork();

现在有两个进程。这两个进程中的每一个都执行一个

fork();

现在有四个进程。这四个过程中的每一个都执行一个

switch(pid_child = fork())

现在有八个进程。

相对于最终的进程总数,显示的程序之前或之后所做的其他任何事情都没有,fork() 是重要的。

总计:八个进程。

【讨论】:

  • 哦,我现在明白了,我猜......我没有在 for 循环中的 2 个 forks() 之后打印进程,我认为这让我大吃一惊,我做错了什么。因此,如果我要添加另一个 fork(),这将是 16 个进程。但我有一个疑问,我们将在 switch case(0) 中添加 fork() 会发生什么?因为我的程序打印了 12 个进程。我不知道为什么......
  • 您必须用纸和笔计算出有多少进程可以达到fork()。然后,将完全相同的量添加到锅中。
  • 嗯,如果 2 个 fork() 在 switch 之前,一个 fork 在 case 0,我们将有 16 个进程?因为在案例 0 中有 8 个进程到达那个 fork()?
  • 不,我们不会,因为不会有 8 个进程到达案例 0。
  • 这是为什么呢?我们忽略 switch(pid_child = fork())?或者我错过了什么......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多