正确使用的叉子,等等,出口,等等
-
13-09-2019 - |
题
我有这个要解决的问题,我不知道如何做到这一点,因为只有几个系统通话我们可以用它来解决它,我看不到他们是如何有用的情况。
练习:
我有阵与大小[10][1000000]与整数和每个线创建一个新的进程与叉().这个想法的各个过程是要通过所有数字的特定路线和寻找具体的数量,然后打印的消息。这是第一步骤的问题,它的完成。第二个步骤是打印总的出现次数上的每条线 通过了.而在最后,总计发生的次数。
该呼吁:
该系统通话我可以使用都是这样描述,在该文件为这项工作:
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()
和如何/何在哪里使用。除了人页,是否有任何更多的文件,我可以看到码的例子和这样的了解他们更好吗?或有人可以解释我的差异和提供基本的例子证明了这种差异?
解决方案
使用 waitpid()
对加纳出口的状态儿童的程序;使用 wait()
不保证有关列在这儿童的尸体进行检索。
On Unix,出口状况限制为8比特,这可以被视为签署或未签名的程序检索的数据。你还得到一个8位值识别信号数目和核心倾倒地位的终止儿童。据我所知,无论是状态或信号位总是零(通常是当处理退出成功).
如果你不知道这一数字要返回小于256,然后退出的状态不是要走的路。正如其他人所说的那样,你必须使用一些其他IPC在这种情况。如果只有系统的呼吁允许那些,那么你必须得出的结论的价值将低于255,或者溢出并不重要。也不是令人满意的结论之外的功课的运动,但在"现实世界",你不是仅限于4个系统的呼吁。
也参看 出口码比255?.请注意,在Windows,范围内的出口码是多大的-但你不会使用该系统的呼吁中列出的问题。
观察:当我这样做 exit(1)
, 值状态 wait()
256;还有一个原因是什么?
回答:是的。低8比特的状态字编码信号的号码等;高8位(16位)状态字编码的出口状况。
看看 <sys/wait.h>
和宏WIFEXITED(),WEXITSTATUS()等。
其他提示
我认为你在做什么应的工作细刚刚返回的出现次数作为出口码的过程。
你说exit()将只允许数字下面的256个。我非常怀疑如果是这种情况,但这将是简单的足够你写测试计划,以找出肯定的。
听起来像这真的只是一个简化版本 地图减少.你可能想看看这算法,以及一些想法,你如何能进一步并行的程序和可能获得一些额外的信贷:)
作为之间的差异等()和waitpid()-如果你只是想要等待任何你的孩子过程的完成,将使用等().如果你想要等待,只为一个具体的儿童的过程,或者如果你想检查,如果一个孩子的过程中已退出不挂,你将使用waitpid().