C 使用wait、waitpid、fork将作业拆分为两个线程

C 使用wait、waitpid、fork将作业拆分为两个线程,c,fork,wait,waitpid,C,Fork,Wait,Waitpid,我希望将作业拆分为两个子进程。一个子项查找最小值,另一个子项查找最大值。 以下是示例代码: 现在返回值是最小值:0最大值:0,您可以看看这个吗?您并没有拆分成线程,而是拆分成新进程,每个进程都有自己的变量版本(因为两个新进程都有自己的独立内存)。您要么需要某种IPC,要么需要实际使用线程。进程不共享内存。由函数修改的最小/最大值全局变量是进程的局部变量。它们都不会触及父min/maxvalue变量。 您需要以某种方式传达结果,例如使用管道/插座 我认为您还有一个问题,实际上您正在生成三个进程。

我希望将作业拆分为两个子进程。一个子项查找最小值,另一个子项查找最大值。 以下是示例代码:


现在返回值是最小值:0最大值:0,您可以看看这个吗?

您并没有拆分成线程,而是拆分成新进程,每个进程都有自己的变量版本(因为两个新进程都有自己的独立内存)。您要么需要某种IPC,要么需要实际使用线程。

进程不共享内存。由函数修改的最小/最大值全局变量是进程的局部变量。它们都不会触及父min/maxvalue变量。 您需要以某种方式传达结果,例如使用管道/插座

我认为您还有一个问题,实际上您正在生成三个进程。
使用第一个fork()分叉的第一个进程将执行第二个fork(),因为它不受if保护。

您没有像其他人所描述的那样使用线程


但是,当您可以在一个循环中查找最小/最大值时,为什么要这样做呢?

Ok,更改为static int minValue=0;但不要影响别人。也许每个过程如何捕捉返回值?你没有得到这个;分叉进程的每个进程都有自己的变量副本,这意味着当它们对其副本进行操作时,父进程中的原始值(即您正在打印的值)永远不会更改。你真的需要仔细阅读分叉进程和线程之间的区别。但是有没有可能不使用pipie/sockets,只捕获每个进程的返回数据?没有其他我会感到自豪的方法。宏:int WEXITSTATUS(int status)如果WIFEXITED是status的真值,此宏从子进程返回退出状态值的低位8位。请参阅“退出状态”部分(这意味着不适用于int,仅适用于256以下的值)。此外,对于成功终止的进程,退出状态应为0,并且不应任意使用。您认为它是点搜索最小值/最大值??我试着用fork()做些什么来做到这一点?请看一下提供的代码。一看就可以找到最小值和最大值。