Intereting Posts
найти строки, которые не заканчиваются на «rpms» с sed Изменить строку, если оригинал не соответствует определенной строке. Поиск и замена чего-либо, содержащегося в ‘(одинарные кавычки) Тест существования файла Bash всегда верен Терминатор, установленный через Homebrew «Несовместимая версия библиотеки», Репозитории Ubuntu PPA можно использовать на Debian? Поиск и удаление файлов старше 30 дней Диск является узким местом. Фоновые процессы ухудшают ситуацию. Как улучшить отзывчивость? Удалите все файлы отмены Vim во всех, кроме одного каталога Найти дубликаты имен файлов с определенным шаблоном соответствия Как найти процессы с помощью последовательного порта WinRAR installer.rar (автоматизировать ожидание установки) Установите Ubuntu с маленького USB-накопителя Использование aplay и выбор того, какой вывод на карте использовать dd loop input Файл для вывода устройства?

Как вы отправляете приложения командной строки прямо в фон?

Я уже знаю, что нажатие ctrl+z останавливает приложение, а затем я могу отправить приложение в фоновый режим с помощью команды bg , но это означает, что существует короткий период времени, когда приложение останавливается.

Как отправить приложение напрямую в фоновый режим, не останавливая его?

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

    Близкое приближение – отправить приложение на задний план очень быстро. В конце концов, приложение делит процессорное время с другими, и пауза в несколько сотых секунды не должна иметь значения. (Это относится к приложениям реального времени, поэтому убедитесь, что они запускаются в фоновом режиме.) Я использую привязку оболочки для Ctrl + Z, которая отправляет последнее заданное задание в фоновый режим. Таким образом, нажатие Ctrl + Z Ctrl + Z отправляет задание в фоновый режим с минимальным временем приостановки.

    Вот моя привязка zsh, которая также «фоновая» полусведенная команда, когда командная строка не пуста .

     fancy-ctrl-z () { emulate -LR zsh if [[ $#BUFFER -eq 0 ]]; then bg zle redisplay else zle push-input fi } zle -N fancy-ctrl-z bindkey '^Z' fancy-ctrl-z 

    На английском языке для не-zsh-пользователей в аудитории:

    • Определите функцию оболочки, которая выполняет следующие действия:

      • Если длина входного буфера равна 0, поместите текущее задание (последнее задание, которое было приостановлено или запущено в последний раз) в фоновом режиме и снова отобразите подсказку.
      • В противном случае поместите входной буфер в стек и покажите новое приглашение. Как только пользователь вводит команду или отменяет ее с помощью Ctrl + C , отправленный буфер возвращается для дальнейшего редактирования.
    • Свяжите эту функцию с Ctrl + Z.

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

     function bg_ { builtin bg "$@"; } zle -N bg_ bindkey '^Z' bg_ 

    Я не знаю, можете ли вы сделать то же самое в bash. Это должно быть так же просто, как bind -x '"\Cz": bg' , за исключением того, что bash оставляет символ tty stop на месте, поэтому он никогда не получает Ctrl + Z в качестве ввода.

    Вы можете выполнить задание в фоновом режиме, добавив & после него.

    Например, tail -f /var/log/messages & немедленно выполнит задание.

    Как всегда, вы можете видеть, какие задачи вы выполняете с помощью команды jobs .

    Это, конечно, предполагает, что вы еще не выполнили команду.

    Фоновая команда выполняется путем добавления к ней амперсанда.

     sleep 300 & 

    Если он уже запущен, ваш единственный вариант – остановить его, а затем фоновый режим.