命令行输入值的fork exec wait循环
我正在尝试执行另一个文件中的文件,最多执行5次并保存结果。我在for循环中使用fork exec wait,它是这样的:命令行输入值的fork exec wait循环,c,linux,fork,exec,wait,C,Linux,Fork,Exec,Wait,我正在尝试执行另一个文件中的文件,最多执行5次并保存结果。我在for循环中使用fork exec wait,它是这样的: for(i = 0; i< Number_of_Processes; i++){ pid = fork(); if(pid == 0) { execl(...); exit(EXIT_Failure); }
for(i = 0; i< Number_of_Processes; i++){
pid = fork();
if(pid == 0)
{
execl(...);
exit(EXIT_Failure);
}
else if(pid > 0)
{
wait(&status);
result = WEXITSTATUS;
}
}
for(i=0;i0)
{
等待(&状态);
结果=状态;
}
}
问题是,它第一次正确执行第二个文件,然后将第一个结果重新打印5次(或用户输入的任何内容)
我尝试了很多其他的方法,比如当pid=0时中断,但是没有成功。我找不到如何在循环中使用exec
的合适示例,所以我被困了好几个小时,尝试上下移动函数却一无所获。
无论我做什么,我都看不到内部文件的第二次执行。显然这是一个时间问题,当我在子进程中的
execl
之前添加sleep(1)
时,它修复了所有问题,一个接一个地执行所需的进程,并打印出真实的结果
for(i = 0; i< Number_of_Processes; i++){
pid = fork();
if(pid == 0)
{
sleep(1);
execl(...);
exit(EXIT_Failure);
}
else if(pid > 0)
{
wait(&status);
result = WEXITSTATUS;
}
}
for(i=0;i0)
{
等待(&状态);
结果=状态;
}
}
打印结果如何?顺便说一下,WEXITSTATUS
是一个宏,它获取您的状态的值。参见示例。@chrisayock根据我的代码,我的结果的第一行是我期望的,但是第二行和其他行与第一行一样,就像exec没有运行过多次一样。如果您知道您在等待什么,我建议您使用waitpid
,而不是wait
。你可能是看错了孩子的终止。