Fork() 在 switch-case 中打印多个大小写

Fork() printing multiple case in switch-case

我刚开始学习Linux编程,我的疑问对你来说可能很愚蠢,但我真的很困惑,所以请帮助我解决这个问题- 这是代码

#include <string>
#include <iostream>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include "err.h"

using namespace std;

int main(){
    int a=-5;
    switch(a=fork()){
        case -1:
            cout<<"error\n";
            break;
        case 0:
            cout<<"here comes the child\n";
            break;
        default:            
            cout<<"a is "<<a<<endl;
//      break;
    }
    return 0;
}

输出: 一个是28866 child

来了

请参阅 fork(2) 文档:

   On success, the PID of the child process is returned in the parent,
   and 0 is returned in the child.

所以在你的例子中,你得到 both 288660 作为两个单独进程(父进程和子进程过程)解释了输出。请注意,输出顺序可能会有所不同。

这是 fork 完成的目的:您想同时执行您的程序或部分程序。 return 值允许您检测您所在的进程。

Question1:I don't understand why both case 0: and default: gets executed !

case 0由子进程执行,其中fork returns 0。默认case在父进程中执行,其中return值为fork是新子进程的pid。

Fork,正如 documentation 所说,创建调用进程的精确副本,包括当前指令指针。 IE。父进程和子进程都将执行 switch 语句。

Question2:According to me value of a should be 0 if child process is created successfully!

在子进程中,是的。在父进程中,它是子进程的 pid。

成功执行后,fork命令return将子进程的进程ID传给父进程,return传0给子进程。 fork命令执行后,父进程和子进程都执行同一套指令。在这种情况下,子进程和父进程都执行 switch 语句。值 "a is 28866" 由子进程打印,值 "here comes the child" 由父进程打印。要让父子进程执行不同的指令,查看fork命令的return值