我在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
排在第二位的输出?如果这是可能的,那么为什么我在每次运行中得到相同的输出?答案 0 :(得分:2)
是的,您使用fork
功能创建流程。成功fork
电话后,您将在&#34; parallel&#34;中运行两个进程。
但是,你对进程调度程序没有任何影响,所以首先你不知道哪个进程是第一个运行的,除非你知道你执行的每个程序需要多长时间,否则你就不能预测每个人运行多长时间。如果所有两个外部程序(prcs1
和prcs2
)都打印到标准输出行,则无法确定首先打印哪一行。
实际上,如果操作系统进程调度程序决定在打印过程中切换进程,则输出会变得混乱,因为两个进程输出都会相互混合。