这段代码中fork产生的进程数是多少

What is the number of processes generated by forks in this code

#include <stdio.h>
#include<unistd.h>
#include<sys/types.h>
int main(void) {
  pid_t a,b,c;
  a=fork();
  b=fork();
  if(a||b)
    c=fork();
  printf("%d %d %d\n",a,b,c);
}

所以我把这段代码改成这样,原来是:

#include <stdio.h>
#include<unistd.h>
#include<sys/types.h>
int main(void) {
  if(fork()||fork())
    fork();
  return 0;
}

所以通过那个 printf,我会有 5 个进程,但它是正确的还是检查进程数量的更好方法?就像,打印所有行并仅获取具有 0 和一些其他值的行,在所有分叉之后,这就是我所做的

它们不等价,因为 || 运算符的 short-circuiting。

在第一个版本中,

b = fork();

在父级和第一个子级中无条件执行。所以此时有两个子进程和一个孙进程。

在第二个版本中,

if (fork() || fork())

创建一个子进程,然后只在原父进程中创建第二个子进程。它不会创建孙子进程,因为第一个 fork() returns 0 在子进程中,所以第二个 fork() 被跳过。

我不认为有什么方法可以在没有变量的情况下使两者等价。