系统编程 - fork() 方法
System Programming - Fork() Method
我正在研究系统编程系统调用。我的作业中有一个代码块(如下所示)。这个问题问我将打印多少个 A、B 或 C。我的问题是if(pid == 0)
的含义是什么?我想if(pid == 0)
的意思是假的,所以我分析将打印 2 x A 和 2 x B。我是在写还是? 第二个问题是pid2 = fork()
会再次执行 main 吗?
int main()
{
int pid,pid2;
int i;
pid = fork();
printf("An");
if (pid == 0)
pid2=fork();
if (pid2)
printf("Bn");
printf("Cn");
return 0;
}
fork
系统调用是特殊的。你调用它一次,它返回两次。一次在孩子身上,一次在父母身上。
在父项中,它返回子项的 pid,在子项中返回 0。因此,if (pid == 0)
的意思是"如果这是孩子"。
fork
将0
返回到子进程,并将子进程的 pid 返回到父进程。手册页应清除其他所有内容。
Fork 返回 2 个值:
- 子进程中为 0,父进程中为正值。
- 在 fork() 调用之后,您将有 2 个进程(如果没有发生错误,在这种情况下返回 -1)。
在您的示例中,您创建了 3 个进程,并将输出 2A、1B 和 3C
pid2
在父进程案例中未初始化。打印多少B
是未定义的行为。
pid=fork()
不会再次执行main()
,希望...
他返回 Fork 调用的值会返回一个不同的值,具体取决于您当前所处的进程。
假设您希望在父进程中执行一些代码,您将在此条件块中将这部分代码 pu :
p = fork();
if (p > 0)
{
// We're the parent process
}
如果你想在子进程中执行一些代码,同样适用:
p = fork();
if (0 == p)
{
// We're the child process
}
其余的(由父母进程和孩子执行)在 else 块中。
相关文章:
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- 通过方法访问结构
- 最小硬币更换问题(自上而下方法)
- C++为构建时间获取QDateTime的可靠方法
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 处理多个异常集合的C++方法
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 有什么方法可以遍历结构吗
- 当类在C++中定义时,有什么方法可以"register"类吗?
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 实现无开销push_back的最佳方法是什么
- 使用std::函数映射对象方法
- 有符号的int和int-有没有一种方法可以在C++中区分它们
- C++从另一个类访问公共静态向量的正确方法是什么
- C++优先级队列,按对象的唯一指针的特定方法升序排列
- 没有为自己的结构调用列表推回方法
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- 系统编程 - fork() 方法
- 用C编写Linux服务器的最佳方法(phteads、select或fork?)
- 这是重定向fork和execvp派生的子级的输出的错误方法吗