Я запускаю несколько программ, используя fork()
, а затем execve()
из третьей программы. Все, для чего предназначались эти программы, сделано, но в конце третья программа не возвращается ... то есть командная строка не появляется.
Если я использую команду wait()
в вызывающей программе, тогда программы execve
возвращаются, только если порядок операторов ожидания соответствует порядку конца программ execve
. Почему это может быть?
Вот упрощенный код:
int main()
{
int child1,child2,status;
char*newargv1[] = {./xyz",NULL};
char *newargv2[] = {./abc",NULL};
if((child1 = fork())==0)
execve(newargv1[0],newargv1,NULL);
if((child2 = fork())==0)
execve(newargv2[0],newargv2,NULL);
while(wait(&status) != child1);
while(wait(&status) != child2);
}
Работает нормально, если child1 заканчивает первым. ./xyz и ./abc имеет некоторую простую обработку и контроль доходит до конца.