从执行这个程序打印出多少颗星?

时间:2018-02-21 03:59:57

标签: c operating-system

这是我中期的问题。我知道在运行程序后会有2颗星。但我不确定为什么。这个问题要我画一个图来说明原因。我不知道如何画它。

感谢您的帮助!

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


unsigned char i;
int main() {
    unsigned int fs;
    for (i=0; i<2; i++) {
        fs = fork();
        if (fs) { printf("*\n"); }
    }
}

2 个答案:

答案 0 :(得分:2)

系统调用fork()用于创建进程。它不需要参数并返回进程ID。

fork()的目的是创建一个新进程,该进程成为调用者的子进程。创建新的子进程后,两个进程将执行fork()系统调用之后的下一条指令。

返回fork()

的值

如果fork()返回负值,子进程的创建 不成功

fork()向创建的子进程返回

fork()将正值进程的进程ID 返回给父级。

参考:http://pubs.opengroup.org/onlinepubs/009695399/functions/fork.html

答案 1 :(得分:2)

系统调用Fork()用于创建进程。 它返回一个如下所示的整数:

  1. 如果fork()返回负值,则创建子进程 没成功。
  2. fork()向新创建的子进程返回零。
  3. fork()返回一个正值,即子进程ID 过程,给父母。
  4. 以下是流程树图的示例:

    #include <stdio.h>
    int main()
    {
       fork(); /* A */
       ( fork()  /* B */ &&
         fork()  /* C */ ) || /* B and C are grouped according to precedence */
       fork(); /* D */
       fork(); /* E */
    
       printf("forked\n");
       return 0;
    }
    

    图: enter image description here

    有关更清晰的解释请访问此链接: https://www.geeksforgeeks.org/fork-and-binary-tree/