C 中此分叉概念的正确输出

correct output for this fork concept in C

所以出于某种原因我无法在 C 中获得此代码的输出,因此我只能在下面针对此代码提出一些概念性问题:

  1. int N = atoi(argv[i]); 是做什么的?它只是定义整数 N 作为数组?
  2. for循环中,if (-1 = fork())是什么意思? -1 是否意味着它是一个错误或不是正确的循环?这意味着我无法使用 fork 创建子对象?
  3. getpid() 在调用 printf 函数时做了什么?
  4. 正确的输出应该是什么?

代码:

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


int main (int argc, char* argv[] ) {
    int i;
    int N = atoi(argv[i]);
    printf("Create processes....\n");
    for (i = 0; i < N; i++) {
        if (-1 = fork())
            exit(1);
    }
    printf("Process id  = %d\n", getpid());
    fflush(stdout);
    sleep(1);
    return 0;
}

您提出的许多问题只需查看手册页即可得到解答。无论如何,我会尝试解释它们。

1) int atoi(const char *str) str -- 这是整数的字符串表示形式。此函数 atoi returns 将转换后的整数作为 int 值。如果无法执行有效转换,则它 return 为零。

至于你的代码,我在其中存储了垃圾值。所以atoi(argv[i]))的值是不可预测的。您可能想为 i.

分配一个值

2) -1 == fork() ,(我假设你在你的代码中犯了一个语法错误,你已经知道了)发生了什么,我们检查叉子的 return 值() 函数,如果查看手册,fork() 用于创建新进程。如果创建新进程失败,则它 return -1。写成fork() == -1

就更有意义了

3) getpid() returns 调用进程的进程ID。 (这通常由生成唯一临时文件名的例程使用。)

4) 右输出是什么意思?您是否尝试过 运行 代码并遇到任何错误?请详细说明

如果您 运行 带有命令行参数的更正代码,这就是输出的样子。

de@ubuntu:~/Desktop$ ./a.out 2
Create processes....
Process id  = 25405
Process id  = 25406
Process id  = 25408
Process id  = 25407