У меня есть кусок кода, который выглядит так:
pipe(fd);
child_map[0] = fd[0];
child_map[1] = fileno(stdout)
child_map[2] = fileno(stderr);
pid = fork();
if (child_process)
dup(child_map[0], STDIN_FILENO)
dup(child_map[0], STDOUT_FILENO)
dup(child_map[0], STDERR_FILENO)
execvp(argv[0], argv) /* child process can be either "grep" or "more" etc */
else if parent_process
return;
Моя проблема в том, что после того, как я перенаправил вывод в grep / more (который может быть дочерним процессом), я не смог вернуть запрос терминала. Команда o / p хорошо печатается на терминале. Но я не возвращаю приглашение и вижу, что процесс "more" или "grep" выполняется в фоновом режиме. Мне нужно ввести Ctrl + C, чтобы получить подсказку обратно. Я знаю, что это связано с тем, что дескрипторы файлов не закрываются и т. Д., Но я не знаю, как решить эту проблему.
На самом деле это делается из другого контекста процесса. И я вижу, что родительский процесс все еще работает. Это не прекращается, если я не прекращаю это. Таким образом, нет никакого вопроса о том, что ребенок осиротел. [Поднято из комментария Вина, значение уточнения сомнительно -msw]