Я пытаюсь предоставить дочерний процесс (через 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
Любые идеи? Большое спасибо!