如果(fork())fork()

3

我正在为操作系统测验学习,但不理解输出的含义。

if(fork())
    fork()

这将产生什么结果。有人能解释一下吗?

我不理解这行代码:

if(fork())

编辑:

我所说的“输出”是指执行此代码将有多少个进程。

抱歉,我学习后有点头晕。


这将不会输出任何内容。问题肯定包括一个printf或其他在fork之后输出的东西? - ysth
4个回答

11

这是一个提示:if (fork()) 只是写成了 if (fork() != 0) 的简洁方式。


4
我认为if(x!=0)其实是写作if(x)的冗长表达方式。 :) - Vovanium
1
这道测验中的问题是:如果(!fork()) 如果(!fork()) 如果(fork()) fork(),得到了满分 <3。 - faris

4

也许你最好的方法就是试一试,阅读有关fork的文档,如果还是不明白,就针对你不理解的那部分提出更具体的问题。

首先尝试这个:

#include <stdio.h>
#include <unistd.h>
int main(int argc,char **argv){
    int x,y=0;
    x = fork();
    if (x) y = fork();
    printf("x: %d, y: %d\n",x,y);
    return 0;
}

2

我曾经和你一样遇到过同样的问题。

::::::> if (fork()) 的含义如下:

if (fork() !=0),正如你所知道的:

  • fork(): 有三个返回值!

  • fork() = 0 表示子进程。

  • fork() < 0 表示出错。

  • fork() > 0 表示父进程。

因此:

if ( 0 != O ) ==> false(在这种情况下,您不必执行两次 fork())

if (-123 != 0 ) ==> True(是的,您需要执行两次 fork())。

if (5 != 0 ) ==> true(是的,您需要执行两次 fork())。

祝你好运。


0

针对父级

if (fork()) is 

被评估为

if(pid_of_child) 

对于子进程,它被评估为:

if(0)

就是这样 :)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接