Скажем, вы начинаете работу, как это
foo
а затем желание, чтобы вы хотели поместить его в фоновом режиме. Нажатие Ctrl+, Zа затем bgделает трюк, но будет зависать fooмежду Ctrl+ Zи bg. Как разместить foo на заднем плане, не заморозив его?
Скажем, вы начинаете работу, как это
foo
а затем желание, чтобы вы хотели поместить его в фоновом режиме. Нажатие Ctrl+, Zа затем bgделает трюк, но будет зависать fooмежду Ctrl+ Zи bg. Как разместить foo на заднем плане, не заморозив его?
Ответы:
Технически fooуже работает в фоновом режиме. Вы можете начать второй сеанс терминала, и первый продолжит работать, fooпока вы будете заниматься другими делами.
В X это просто включает запуск второго терминального приложения или открытие другой вкладки, если ваш эмулятор терминала имеет такие функции.
На консоли, если вы не планируете этого, вам нужно будет переключиться на другой виртуальный терминал и войти снова.
Если вы используете терминальный мультиплексор, например, screenили tmuxвы можете начать другой сеанс внутри него. Например, на экране это делается с помощью Ctrl+, Aсразу после Ctrl+ C. Для переключения между ними используйте Ca Cn и Ca Cp, чтобы переключаться между терминальными сессиями.
foo сама по себе (отсутствие специальной проверки, которая, как я предполагаю, в дикой природе находится где-то между редкостью и несуществующей), не имеет значения, выполняется ли она в самом верхнем окне или даже если что-то отображает ее вывод.
fooуже работает в фоновом режиме" ... просто ... Нет. Технически.
fooтак что теперь мне делать?». Если вы чувствуете, что этот ответ (или другие ответы) бесполезен при ответе на вопрос, я призываю вас воспользоваться своими привилегиями для голосования, а также оставить свой собственный ответ, отвечая на вопрос с точки зрения того, что вы считаете правильным, а не рассуждая об одном из оставленных ответов на вопрос. Возможно, вы чувствуете, например, что ответ l0b0 лучше, но мой ответ предлагает способ сделать хотя бы примерно то, что хочет ОП.
Отправка приложения из переднего плана в фоновый режим требует взаимодействия как терминала, так и оболочки. Терминал не может сделать это один, потому что оболочка должна установить группу процессов переднего плана. Оболочка не может сделать это одна, потому что терминал должен обрабатывать нажатие клавиши (оболочка не на переднем плане, поэтому он не может получить нажатие клавиши).
У меня есть конфигурация zsh, где я могу нажать Ctrl+ Zдважды подряд; первое нажатие приостанавливает процесс, а второе нажатие возобновляет его в фоновом режиме. Я не знаю, как перенести его на bash.
Если вы работаете в эмуляторе терминала, который позволяет вводить нажатия клавиш, вы можете сделать это ^Zbg^M(используя ^нотацию для управляющих символов). Например, с эмулятором терминала X11 запустите, xdotool --window 1234 Ctrl_L+Z b g Returnгде 1234 - идентификатор окна эмулятора терминала. В Screen запустите screen -S foo -p 12 -X stuff $'\032bg\r'где fooимя сеанса экрана и 12идентификатор окна.
Если вы набираете текст недостаточно быстро, запустите программу kill -s SIGSTOP 1023 && kill -s SIGCONT 1023из другой оболочки, предположив 1023 в качестве целевого PID.
ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Как Руслан, вероятно, знал, эта последовательность фактически возобновляет работу так быстро, bashчто не замечает этого.