Я пытаюсь предоставить дочернему процессу (через fork()
) приоритетный доступ к терминалу.
После I 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
Есть идеи?Большое спасибо!