[英]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
现在,我的问题是:
prcs1
和prcs2
? Stdlibrary finished
而Syscall finished
? 如果有可能,那么为什么每次运行都会得到相同的输出? 是的,您可以使用fork
函数创建一个流程。 成功完成fork
调用后,您将有两个并行运行的进程。
但是,您对流程调度程序没有任何影响,因此首先您将不知道哪个流程将首先运行,并且除非您知道每个程序要花费多长时间,否则您将无法预测每个流程将花费多长时间。要么运行。 如果两个外部程序( prcs1
和prcs2
)都将一行输出到标准输出,则不能确定要先打印哪一行。
实际上,如果操作系统进程调度程序决定在打印过程中切换进程,则由于两个进程的输出相互混合,输出可能会出现乱码。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.