【Linux 编程基础 · 多进程实验(三)】利用fork()创建3个子进程:第1个子进程打印“Hello World”;第2个子进程计算2的8次方,并且打印结果;第3个子进程尝试打印5/0的结果。父

题目利用 fork() 创建 3 个子进程:第 1 个子进程打印 “Hello World”;第 2 个子进程计算 2 的 8 次方,并且打印结果;第 3 个子进程尝试打印 5 / 0 的结果。父进程利用轮询方法非阻塞式地等待 3 个子进程结束,并且打印子进程的结束信息。点拨waitpid() 等待一个指定的进程或进程组的状态改变。默认情况下,它只在指定的进程(组)被终止后返回。可以通过传递相应的参数来改变其行为。该函数返回状态改变的子进程 ID。若出错,返回 -1。如果指定了参数(宏)WNOHANG
摘要由CSDN通过智能技术生成

题目

利用 fork() 创建 3 个子进程:第 1 个子进程打印 “Hello World”;第 2 个子进程计算 2 的 8 次方,并且打印结果;第 3 个子进程尝试打印 5 / 0 的结果。父进程利用轮询方法非阻塞式地等待 3 个子进程结束,并且打印子进程的结束信息。

点拨

waitpid() 等待一个指定的进程或进程组的状态改变。默认情况下,它只在指定的进程(组)被终止后返回。可以通过传递相应的参数来改变其行为。该函数返回状态改变的子进程 ID。若出错,返回 -1。如果指定了参数(宏)WNOHANG,且第一个参数 pid 指定的一个或多个子进程存在,但未改变其状态,则返回 0。
WNOHANG | WUNTRACED | WCONTINUED 指定 waitpid() 在无子进程退出时立刻返回、在子进程被暂停时返回、在子进程因为 SIGCONT 继续运行时返回。
宏 WIFEXITED 判定指定的状态变量是否表示进程正常退出。WEXITSTATUS 可以从状态变量读出子进程的退出状态。
WIFSIGNALED 表示进程是否被信号终止。配合 WTERMSIG 可以获得使进程(异常)终止的信号。
WIFSTOPPED 表示进程是否被暂停。配合 WSTOPSIG 可以获得使进程暂停的信号。

源代码

#include <cmath>
#include <cstring>
#include <iostream>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>

using namespace std;

const size_t CHILDREN_COUNT = 3;
pid_t child[CHILDREN_COUNT];
pid_t terminate_child[CHILDREN_COUNT];
int end_state[CHILDREN_COUNT];

int main() {
   
    ios::sync_with_stdio(
  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值