【发布时间】:2023-03-12 21:11:01
【问题描述】:
我有这个问题要解决,但我不知道该怎么做,因为我们只能使用几个系统调用来解决它,而且我看不出它们对这种情况有什么帮助。
练习:
我有一个大小为 [10][1000000] 的矩阵,带有整数,并且对于每一行,我使用 fork() 创建一个新进程。每个过程的想法是遍历该特定行的所有数字并找到一个特定数字,然后打印有关它的消息。这是问题的第一步,它已经完成。第二步是按顺序在每一行打印该数字的出现总数。最后,该数字出现的总数。
呼唤:
我可以使用的系统调用在本练习的文档中是这样描述的:
pid_t fork(void);void exit(int status);pid_t wait(int *status);pid_t waitpid(pid_t pid, int *status, int options);
问题:
我不知道该怎么做,因为exit() 调用只允许我传递一个低于 256 的数字,如果出现的次数大于这个数字怎么办?我该如何返回这样的号码?
另一个问题:
我不完全理解wait() 和waitpid() 之间的区别以及如何/在哪里使用一个。除了手册页之外,是否还有更多文档可以让我查看代码示例等以便更好地理解它们?或者有人可以向我解释这些差异并提供一个基本示例来证明这些差异吗?
【问题讨论】:
-
请输入输出样例。取一个维度为 3x5 的数组,其中 3 = 行数,5 = 为简洁起见的整数数。
-
如果您需要在进程之间进行通信并且无法使用退出代码,您将不得不研究其他形式的 IPC。考虑管道(可能通过 popen)。
-
您可以将数字写入文件,还是可以使用 STDIN/OUT 在进程之间进行通信?
-
1) exit() 接受一个 int(即不限于 0-255)。当您调用 wait(int *status) 并且您的子进程正常退出时,这是否会正确反映在您的主进程中?
-
@Brian Agnew:在 Unix 上,退出状态限制为 8 位。您从 wait() 或 waitpid() 获得 16 位状态,但其他 8 位编码信号编号和核心转储状态。 16 位字的一半总是零位。
标签: c process fork system-calls