Intereting Posts
Количество горизонтальных линий vim -mtune = arm920t ": команда не найдена Примените одно и то же поле из разных записей к операции. Как изменить формат подсказки bash? Как получить nth до n + ath байт по всем строкам, формируя текстовый файл в * nix? Обновите мой IP-адрес (dhclient не найден) Найти все файлы и использовать результат в шаблоне поиска grep Двойная путаница монитора в Ubuntu Gnome 17.10 при работе с видеофайлами внезапно отключается ноутбук Как удалить строки, содержащие некоторые имена в одном столбце в файлах txt Установщик NVIDIA не может найти файлы источника / сборки ядра (скомпилированные из kernel.org) Как отключить спящий режим на debian7? Debain (PIXEL) в VirtualBox не сохранит файлы с сохранением используя скрипт bash для вывода нового скрипта: нужна замена переменных, которые нужно заменить и не заменить конвертировать – неустранимая ошибка, когда PDF в jpg

Разместить работу в фоновом режиме без замораживания

Скажите, что вы начинаете такую ​​работу

foo 

и затем желайте, чтобы вы захотели поместить его в фоновом режиме. Набрав Ctrl + Z, а затем b g выполнит трюк, но заморозит foo между Ctrl + Z и b g . Как я могу разместить foo в фоновом режиме, не заперв его сначала?

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

У меня есть zsh-конфигурация, где я могу быстро нажать Ctrl + Z дважды подряд; первое нажатие приостанавливает процесс, а второе нажатие возобновляет его в фоновом режиме. Я не знаю, как перенести его в bash.

Если вы используете эмулятор терминала, который позволяет вводить нажатия клавиш, вы можете ввести ^Zbg^M (используя ^ обозначение для управляющих символов). Например, с эмулятором терминала X11, запустите xdotool --window 1234 Ctrl_L+Z bg Return где 1234 – это идентификатор окна эмулятора терминала. С помощью экрана запустите screen -S foo -p 12 -X stuff $'\032bg\r' где foo – это имя сеанса экрана, а 12 – идентификатор окна.

Технически foo уже работает в фоновом режиме. Вы можете начать второй сеанс терминала, и первый будет продолжать работать с foo пока вы делаете другие вещи.

В X это просто включает в себя запуск второго приложения терминала или открытие другой вкладки, если у вашего эмулятора терминала есть такие функции.

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

Если вы используете терминальный мультиплексор, например, screen или tmux вы можете запустить в нем еще один сеанс. Например, на экране это делается с помощью Ctrl + A, а затем Ctrl + C. Чтобы переключаться между ними, используйте Ca Cn и Ca Cp для перехода между сеансами терминала.

Добавление знака & после команды ( foo & ) немедленно закроет его. Но я считаю, что в стандартной конфигурации терминалов / оболочек нет никакого способа сделать что-то сразу, как только оно будет перенесено на передний план.

Если ваш ввод не достаточно быстрый для случая, то запустите kill -s SIGSTOP 1023 && kill -s SIGCONT 1023 из другой оболочки, предположив, что 1023 является целевым PID.

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Как, наверное, знал Руслан , эта последовательность фактически перезапускает работу так быстро, что она не замечает этого.