这段代码中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()
被跳过。
我不认为有什么方法可以在没有变量的情况下使两者等价。
#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()
被跳过。
我不认为有什么方法可以在没有变量的情况下使两者等价。