Как заставить tcsetpgrp () работать в C?

я пытаюсь предоставить дочернему процессу (через 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

Есть идеи? Большое спасибо!

13
задан John Kurlak 24 October 2014 в 15:51
поделиться