Я пишу простую программу, чтобы лучше понимать fork(), wait() и execvp(). Моя проблема в том, что после запуска программы управление не возвращается обратно в оболочку, и я не знаю, почему. Я хочу, чтобы иметь возможность вводить другую команду в оболочку после завершения кода. Я взглянул на this, но я не думаю, что это применимо в моем случае. У меня есть только скопированный код, который я нашел от here.Потеря управления после fork()
ввода/вывода (# находится в передней части линий я типизированных, хотя и не является частью входа):
shell> # gcc test.c -o test
shell> # ./test
input program (ls)
# ls
input arg (.)
# .
test test.c extra.txt
# a;dlghasdf
# go back
# :(
мой код:
int main(void) {
//just taking and cleaning input
printf("input program (ls)\n");
char inputprogram [5] = {0,0,0,0,0};
fgets(inputprogram,5,stdin); //read in user command
int i;
for(i = 0; i < 5; i++) {
if(inputprogram [i] == '\n'){
inputprogram[i] = 0;
}
}
printf("input arg (.)\n");
char inputarg [5] = {0,0,0,0,0};
fgets(inputarg,5,stdin); //read in user command
for(i = 0; i < 5; i++) {
if(inputarg [i] == '\n'){
inputarg[i] = 0;
}
}
char per []= {inputarg[0], 0};
char *arg [] = {inputprogram, per , NULL};
int status = 0;
pid_t child;
//the fork(), execvp(), wait()
//////////////////////////////////
if ((child = fork()) < 0) {
/* fork a child process */
printf("*** ERROR: forking child process failed\n");
exit(1);
} else if(child == 0){
execvp(inputprogram, arg);
exit(1);
} else {
while(wait(&status != child));
}
return EXIT_SUCCESS;
}
хорошо он работал. Почему мне не нужен цикл? Это потому, что у меня только один детский процесс? Я смотрел на это [http://stackoverflow.com/questions/2708477/fork-and-wait-with-two-child-processes], поэтому я запутался. – Daniel
Как быть родителем, намного проще иметь один ребенок, которому нужно ухаживать. Если у вас есть два, вам нужна петля (глаза в затылке). –