Странное поведение с командой bg

Как отправить процесс (приложение) в фоновый режим, если он всегда ожидает ввода на терминал и все время отправляет полученные данные из uart в stdout?

Я не могу отправить свое приложение на фон с помощью CTRL + Z & bg% number / bg %%.

Любая идея, что не так?

Мое устройство (программа) ожидает некоторых команд ввода из терминала для конфигурации, прежде чем оно будет отправлено на задний план. И я получаю ошибку при попытке отправить ее на задний план.

# [CTRL-Z] [1]+ Stopped sudo ./my_app # bg %1 

и он показывает мне что-то вроде этого:

 [1]+ Stopped sudo ./my_app 

  • принимающая команда как параметр в bash
  • Как найти текущий путь chroot jail в Linux <2.6.26
  • Как я могу получить процесс с самым большим pid?
  • О пользователе ssh ProxyCommand
  • Один экземпляр скрипта, но только с одинаковыми аргументами
  • Как устранить то, что ест память?
  • Убейте запущенный сценарий оболочки и убейте весь процесс, запущенный внутри него
  • Как продемонстрировать недопустимые предположения PID?
  • 3 Solutions collect form web for “Странное поведение с командой bg”

    Когда программа, работающая в фоновом режиме, пытается считывать с терминала, она останавливается сигналом SIGTTIN . В настоящее время вход идет на передний план¹; это было бы разрушительно, если бы случайный вход был отправлен в программу переднего плана или в фоновую программу. Таким образом, фоновая программа приостанавливается до тех пор, пока она не появится на переднем плане.

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

     echo "config=foo" | ./my_app & 

    Если вам нужно время от времени взаимодействовать с программой, но она может выполняться без присмотра большую часть времени, запустите ее в терминальном мультиплексоре, таком как Screen или Tmux . Например, с экраном:

     screen -S my_app ./my_app 

    Введите необходимый ввод, затем нажмите Ctrl + A, чтобы отключить сеанс экрана, т.е. пусть он запустится в фоновом режиме и вернется к исходному терминалу. Когда вы хотите снова взаимодействовать с программой, подключитесь к сеансу экрана:

     screen -S my_app -rd 

    Если вам необходимо выполнить некоторые сложные взаимодействия автоматически, напишите сценарий ожидания (или скрипт на другом языке с аналогичной библиотекой).

    ¹ Process group, но я не собираюсь вдаваться в эту тонкость здесь.

    Если ваша команда продолжает читать из tty, вам нужно позвонить

    fg

    после того, как вы получите сообщение «остановлено», чтобы ввести ожидаемый ввод.

    Разве вы не должны передавать аргументы в stdin, потому что они продолжают работать? Если вы просто CTRL-Z, он будет ждать ввода в фоновом режиме.

    например

     $ cat test.sh #!/bin/bash read var echo $var $ cat <<EOF > input d EOF $ ./test.sh < input d $ ./test.sh <input > stdout 2> stderr & [2] 23180 [2]- Done ./test.sh < input > stdout 2> stderr $ cat stdout d 

    При попытке запустить его, не передавая вход:

     $ ./test.sh > stdout 2> stderr & [2] 13012 [2]+ Stopped ./test.sh > stdout 2> stderr 
    Interesting Posts

    Получить рекурсивный счетчик файлов (например, `du`, но количество файлов вместо размера)

    Суммируйте заданный срез элементов в массиве (bash)

    в чем цель setuid включена без исполняемого бита?

    Может ли зависимость systemd применяться только к действию «ExecStart» устройства?

    Пейджинг с последующим уменьшением + F и раскрашивание с помощью awk

    Как сначала просмотреть файлы и каталоги с каталогами

    Управление памятью: устранение виртуальных адресов

    find и delete дает ложное состояние

    дата: следующий следующий час

    Эффективность пространства ссылок Btrfs по сравнению с жесткими ссылками

    Поиск способа резервного копирования / зеркалирования диска путем замены

    Пользовательский макет xkb, в котором один ключ создает две кодовые точки юникода

    Избегайте влияния элементов вспышки на веб-странице с помощью клавиатуры

    Apache – Динамические подпапки

    Приложение запущено в / etc / X11 / xdm / Xsetup не может получать нажатия клавиш

    Linux и Unix - лучшая ОС в мире.