C中的系统调用函数

问题描述 投票:0回答:2

有人可以向我解释等待的内容以及exit(0),exit(1),exit(2)等之间的区别是什么。

这是我很困惑的代码。

int main() 
{ 
    if (fork()== 0) 
        printf("HC: hello from child\n"); 
    else
    { 
        printf("HP: hello from parent\n"); 
        wait(NULL); 
        printf("CT: child has terminated\n"); 
    } 

    printf("Bye\n"); 
    return 0; 
} 

输出

HC: hello from child
Bye
HP: hello from parent
CT: child has terminated
     (or)
HP: hello from parent
HC: hello from child
CT: child has terminated    // this sentence does 
                            // not print before HC 
                            // because of wait.
Bye

这是来自geeksforgeeks的代码,因此转到if语句,如果if语句为true,则执行printf("HC: hello from child\n");,但是为什么又返回else语句并打印出printf("HP: hello from parent\n"); printf("CT: child has terminated\n");

c system-calls
2个回答
0
投票

您正在从单进程的角度看这件事。 fork()创建另一个进程,该进程与父进程完全相同,但具有only区别:克隆上的fork()函数调用的结果为0,但在父级上,它是PID通过操作。

因此if (fork == 0)仅适用于孩子。

换句话说,both分支同时跟随。

wait()部分是父级如何等待子级进程终止的方式。 NULL作为参数的意思大致是“不在乎哪个孩子,只是在乎哪个孩子”。通常,您将waitpid()与从pid调用中获得的fork()值一起使用,但这仅在可能涉及多个子进程的情况下才非常重要。

如果您不“收获”您的孩子,您将以zombies

结束,因此wait部分很重要。

0
投票

关于退出语句的第一个问题,

© www.soinside.com 2019 - 2024. All rights reserved.