C ++ Linux - остановка фонового процесса при нажатии клавиши клавиатуры - PullRequest
0 голосов
/ 05 июня 2018

У меня есть приложение, которое печатает на выходы терминала.
Когда переведите его в фоновый режим (с '&'), и нажмите любую клавишу, например, нажмите Enter, чтобы снова отобразить подсказку (просто чтобы убедиться, что я все еще вbash, когда был отображен какой-либо вывод из фонового процесса), фоновый процесс, кажется, останавливается самопроизвольно:

    [1] Stopped (tty output) app

Я понял, что это потому, что процесс получает SIGTTIN или SIGTTOU, здесь, вероятно, SIGTTIN и SIGTTOU в случаеprintf и т.д., поэтому у меня есть два вопроса:
1. Я попытался обработать его со стороны приложения, просто заблокируйте SIGTTOU и SIGTTIN, это помогает в этом случае, я могу нажать любую клавишу в оболочке, но когда я выполняю процесс на переднем плане - конечно, все мои нажатия клавиш игнорируются !!!
так, как справиться, чтобы он работал в fg и bg ???
может быть, отсоединить процесс от терминала и tty, но сможет ли приложение все еще печатать на консоль?

2. В общем, кто должен обрабатывать эти сигналы?приложение или, может быть, он должен быть обработан в конфигурации tty.(ТОСТОП?)

заранее спасибо!

1 Ответ

0 голосов
/ 12 июля 2018

1.Как справиться, чтобы он работал в fg и bg?

Если ваше приложение печатает только вывод на консоль, SIGTTIN или SIGTTOU не будет проблемой.

В вашем случае,кажется, ваше приложение печатает вывод на консоль и нуждается в вводе с консоли.Если ваше приложение должно распечатать вывод и ждать ввода от консоли, вы не можете запустить приложение в bg, успешно.

2.Кто должен обрабатывать эти сигналы?

Как правило, приложение должно обрабатывать эти сигналы.Вы должны выбрать одну из SIG_DFL (действие по умолчанию), SIG_IGN (игнорировать) или определенную программистом функцию.

...