Пишу программу: подобие шелла.
Есть поддержка
Код:
&
- амперсанд.
Вот с неё начинаются проблемы
Допустим при запуске такой команды:
Код:
anjuta &
нужно запустить "сына" в нём анюту.
Отцу сказать что бы не ждал окончания работы сына и быть готоывм к выполнению другой команды. При вводе новой команды, допустим
Код:
ls -l
всё происходит отлично. Напомню что ранее была открыта ANJUTA.
Перехожу в окно анюты и закрываю её.
Вот здесь начинается непонятное. прошлая команда а именно
Код:
ls -l
начинает сама по себе выполнятся до бесконечности.
Вот код функции
Код:
void cycle()
{
char input[MAX_INPUT_LEN];
int size=0;
char **vector_param = NULL;
int multi_task = 0;
pid_t child_pid;
// get input and delete \n symbol on the end of input
getstring(input,MAX_INPUT_LEN);
while(input != NULL)
{
if(!strcmp(input,"exit"))
break;
else if(!strcmp(input,""))
{
getstring(input,MAX_INPUT_LEN);
continue;
}
// check if have / remove them / set multi task true
multi_task = mt(input);
// covert command line to array
vector_param = commandArr(input,&size);
// add to array NULL on end of array
vector_param = addTostr(vector_param,&size);
child_pid = fork();
if(fork <0)
exit(EXIT_FAILURE);
else if(child_pid == 0)
exec(vector_param,size); // do execvp with vector param
else if(child_pid > 0)
{
free_arr(vector_param,size);
if(!multi_task)
wait3(&status, 0,&u_rusage);
else
while(wait4(child_pid,&status,WNOHANG,&u_rusage)){;}
// get input and delete \n symbol on the end of input
getstring(input,MAX_INPUT_LEN);
}
}
}
В какую сторону смотреть?