Я запускаю приложение, которое получает пакеты TCP и UDP и поэтому не может быть приостановлено. Я изначально запустил 3 процесса одного приложения с разными аргументами в фоновом режиме, используя &
. Когда я только $fg
все три процесса пришел на передний план. Теперь я хочу снова отправить их в фоновый режим, но без приостановки. Как я могу это сделать?
11
Ответы:
Перво-наперво: на переднем плане может быть только один процесс, а не все три.
fg
выводит новейший процесс на первый план. Чтобы ускорить процесс Ctrl+ z, а затем набирать текстbg
быстрее, чтобы «не мешать» рассматриваемому приложению (обратите внимание, что планировщик процессов будет делать это в любом случае много раз в секунду), найдите PID процесса на переднем плане, а затем во втором терминале. / SSH сессия, использоватьВаш оригинальный терминал скажет
stopped
, но так как вы отправилиSIGCONT
прямо сейчас, процесс будет продолжаться в фоновом режиме.источник
Если у вас действительно есть работа на переднем плане, то bash ждет ее завершения, это более или менее определение задачи на переднем плане . Если bash все еще контролирует терминал, проверьте, что происходит
jobs -l
, например:Для этого я запустил три
ncat
процесса прослушивания. Вы также можете увидеть «Готово» или «Остановлено» для статуса работы.Вы можете эффективно справиться с заданием переднего плана из другой оболочки, используя метод SIGSTOP / SIGCONT Стефана Зайделя (хотя фактический сигнал, отправляемый оболочкой с Ctrl- Zэто SIGTSTP, любой сигнал должен работать).
Существует тонкое различие между процессами и заданиями, когда используются термины передний план и фон. Существует только одно задание переднего плана оболочки , может быть несколько процессов переднего плана (это связано с идентификаторами групп терминальных процессов и может наблюдаться при запуске двух или более процессов в конвейере).
Запущенные процессы или конвейер под управлением оболочки называются «заданием», когда при использовании команды
bg
илиfg
вы неявно ссылаетесь на самое последнее задание - в моем случае это то, что+
указано выше. Эти задания также можно (среди прочего) явно указывать как% 1% 2 или% 3 (число в[]
).Неквалифицированная
fg
команда повлияет только на одну работу, самую последнюю, поэтому вы можете ошибаться в своем понимании текущей ситуации. Фоновое задание все еще может записывать в терминал:Это может зависеть от того, как программа обрабатывает терминал,
ncat
отлично работает для записи. Для чтения, хотя программы остановят выполнение, и вы увидите сообщение «Остановлено». Оболочка запустит процессы и будет ждать их выхода или получения сигнала SIGTTIN (это обходнойnohup
путь, как естьdisown
).Вы можете создать фон для определенной остановленной работы с
(в моем случае я получу ошибку
bash: bg: job 3 already in background
)В противном случае , если процесс находится на переднем плане, если программа не ловит SIGTSTP и делает что - то особенное, это вряд ли будет иметь проблемы с быстрым Ctrl- Zи
bg
. В этом отношении нет ничего особенного в сетевых программах: входящие соединения / данные будут буферизироваться ядром (до определенного момента). Потоковое соединение может иметь заметную паузу, хотя.Обратитесь к разделу « КОНТРОЛЬ ЗАДАНИЙ » на странице руководства bash для получения более подробной информации.
источник
Самый простой способ сделать это - использовать экранную программу. Вы можете запустить свое приложение в виртуальном терминале, а затем выйти из экрана, нажав Ctrl + A, D. Если вы хотите возобновить сеанс, ваш тип
screen -x
. Если у вас есть несколько процессов, вам будет представлен список экранов для подключения. Для более подробной информации, пожалуйста, прочитайте справочную страницу экрана .источник