Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
命令行输入值的fork exec wait循环_C_Linux_Fork_Exec_Wait - Fatal编程技术网

命令行输入值的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); }

我正在尝试执行另一个文件中的文件,最多执行5次并保存结果。我在for循环中使用fork exec wait,它是这样的:

    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
。你可能是看错了孩子的终止。