【问题标题】:Please help explain fork() in Operating System [duplicate]请帮助解释操作系统中的 fork() [重复]
【发布时间】:2018-07-29 06:35:44
【问题描述】:

给出以下代码:

main(int argc, char ** argv) 
{
    int child = fork(); 
    int c = 5;

    if (child == 0) 
    {
        c += 5;
    } 
    else 
    {
        child = fork(); 
        c += 10; 

        if (child)
            c += 5;
    }
}

变量 c 有多少个不同的副本?他们的价值观是什么?

所以,答案原来是三 (3) 个过程:

  • c父进程的值为20,

  • cchild1进程的值为10,

  • cchild2进程的值为15,

有人可以帮我详细解释一下吗?一行一行会很棒!

我看到还有一个关于 fork() 的问题,但我想具体了解这行代码以及答案是如何得出的。

【问题讨论】:

  • 我明白,但是对于这个特定的代码,我想了解这些答案是如何得出的。
  • 简短回答,每次成功调用fork() 都会创建一个新进程。除了fork()返回的值之外,新进程在每个细节上都与旧进程相同(它在新进程中返回0,但在原始进程中,它返回新进程的pid。pid总是> 0 .) 对于长答案:请参阅“重复”。那里的答案详细说明了。

标签: multithreading process operating-system


【解决方案1】:

第一个子进程执行:

int child = fork(); 
int c = 5;
    /* since child == 0 */
    c += 5;

第二个孩子执行:

int child = fork(); 
int c = 5;
    /* since child != 0 */
    child = fork(); 
    c += 10;
    /* child == 0 now */

父进程执行:

int child = fork(); 
int c = 5;
    /* since child != 0 */ 
    child = fork(); 
    c += 10;
        /* since child != 0 */
        c += 5;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-03
    • 2012-08-17
    • 1970-01-01
    • 1970-01-01
    • 2021-09-29
    • 1970-01-01
    • 2013-09-16
    相关资源
    最近更新 更多