繁体   English   中英

多处理程序未提供所需的输出

[英]Multiprocessing program not giving desired output

我在C中有这个多进程程序:

#include <stdio.h>
#include <unistd.h>


int main(int argc, char **argv)
{
    pid_t i = fork();
    if(i == 0)
    {
        execv("./prcs1", (char *[]){ "./prcs1", argv[1], NULL});
        _exit(1);
    }
    else if (i > 0)
    {
        execv("./prcs2", (char *[]){ "./prcs2", argv[0], NULL});
        _exit(2);
    }
    else
    {
        perror("Fork failed");
        _exit(3);
    }
}

在此程序中,。/ ./prcs1./prcs2是两个不同程序的两个可执行文件。 ./prcs1提供输出,如Syscall finished ,。/ ./prcs2提供输出, Stdlibrary finished 而且我在每次运行中都得到以下输出:

Syscall finished
Stdlibrary finished

现在,我的问题是:

  1. 上面的程序是否并行运行两个进程prcs1prcs2
  2. 如果它确实并行运行,那么我每次都会得到相同的结果,还是我也可以得到输出,其中Stdlibrary finishedSyscall finished 如果有可能,那么为什么每次运行都会得到相同的输出?

是的,您可以使用fork函数创建一个流程。 成功完成fork调用后,您将有两个并行运行的进程。

但是,您对流程调度程序没有任何影响,因此首先您将不知道哪个流程将首先运行,并且除非您知道每个程序要花费多长时间,否则您将无法预测每个流程将花费多长时间。要么运行。 如果两个外部程序( prcs1prcs2 )都将一行输出到标准输出,则不能确定要先打印哪一行。

实际上,如果操作系统进程调度程序决定在打印过程中切换进程,则由于两个进程的输出相互混合,输出可能会出现乱码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM