я пытаюсь предоставить дочернему процессу (через fork ()
) доступ переднего плана к терминалу.
После того, как я fork ()
, Я запускаю следующий код в дочернем процессе:
setpgid(0, 0);
И:
setpgid(child, child);
В родительском процессе.
Это дает дочернему процессу его собственную группу процессов. Вызов setpgid ()
работает правильно.
Теперь я хочу предоставить дочернему ребенку доступ к терминалу.
Я добавил к дочернему элементу следующее после вызова setpgid ()
:
if (!tcsetpgrp(STDIN_FILENO, getpid())) {
perror("tcsetpgrp failed");
}
После этого есть команда execv ()
для создания / usr / bin / nano
.
Однако вместо появления nano
ничего не происходит, и терминал выглядит так, будто ожидает ввода пользователя.
Кроме того, кажется, что никакой код не выполняется после вызов tcsetpgrp ()
.
Я где-то читал, что мне нужно отправить сигнал SIGCONT
дочернему процессу, чтобы он заработал. Если процесс остановлен, как я могу это сделать? Должен ли родитель отправлять сигнал?
Как мне отправить сигнал SIGCONT
, если это решение?
raise(SIGCONT);
Кроме того, я не уверен, помогает ли это, но код работает нормально и порождает nano
, если я запускаю свою программу с:
exec ./program
Вместо:
./program
Есть идеи? Большое спасибо!