fork() 在开关盒中打印多个大小写
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<<"errorn";
break;
case 0:
cout<<"here comes the childn";
break;
default:
cout<<"a is "<<a<<endl;
// break;
}
return 0;
}
输出:A 是 28866孩子来了
- 问题1:I不明白为什么两种情况 0: 和默认值: 得到执行!
- 问题2:根据我的说法,如果子进程是创建成功!
问题1:I不明白为什么情况 0: 和默认:都会被执行!
案例 0 由子进程执行,其中 fork
返回 0。默认情况在父进程中执行,其中返回值 fork
是新子进程的 pid。
正如文档所述,Fork 创建了调用进程的精确副本,包括当前的指令指针。 即父进程和子进程都将执行 switch 语句。
问题2:根据我的说法,如果成功创建子进程,则a的值应为0!
在子进程中,是的。在父进程中,它是子进程的 pid。
成功执行后,fork 命令将子进程的进程 ID 返回给父进程,并将 0 返回给子进程。fork 命令执行后,父进程和子进程都执行同一组指令。在这种情况下,子进程和父进程都执行 switch 语句。值"a is 28866"由子进程打印,值"这里是子进程"由父进程打印。要使父进程和子进程执行不同的指令,请检查 fork 命令的返回值。
参见 fork(2) 文档:
On success, the PID of the child process is returned in the parent, and 0 is returned in the child.
因此,在您的示例中,您将28866
和0
作为两个单独进程(父进程和子进程)中的返回值,这解释了输出。请注意,输出顺序可能会有所不同。
这是fork
这样做的:你想同时执行你的程序或程序的一部分。返回值允许您检测您所处的进程。
相关文章:
- 如何循环打印顶点结构
- 为什么在popback()操作之后,它仍然打印完整的矢量
- 如何在c++中打印目录
- 有一个打印语句的函数是一种糟糕的编程实践吗
- 在线编译器中的分段C++没有打印消息
- 在C++中打印指向不同基元数据类型的指针的内存地址
- 这个指针和内存代码打印是什么?我不知道是打印垃圾还是如何打印我需要的值
- 如何将结构插入到集合中并打印集合的成员
- 在循环C++中指定字符串之后,不会打印该字符串
- 以螺旋方式打印矩阵的程序.(工作不好)
- 从控制台中删除最后打印的元素
- 如何使用Crypto++并为RSA返回可打印的字节/字符数组
- 如何仅使用对象名称打印特定于对象的成员
- 回溯C++不打印函数,因此文件
- 在一定长度后从数组中打印时缺少整数
- 为什么这个 c++ 代码打印出长度 5,当我打印出字符串时,程序会自动终止?
- 在gem5中打印文件中的所有cache_blocks
- fork() 在开关盒中打印多个大小写
- 本应打印大小写数字,但返回1并退出程序
- C++ 以不区分大小写的字母顺序打印地图