Допустим, вы запустили новое приложение в Linux (например, текстовый редактор и т. Д.), Но забыли использовать «&». Какие команды вы бы использовали для запуска этого процесса в фоновом режиме, не закрывая приложение? Таким образом, вы можете иметь как открытые, так и отдельно работающие процессы (например, терминал командной строки, который вы использовали для создания процесса, и процесс, такой как текстовый редактор, все еще работающий.
24
tmux
дает ту же функциональность, которая требуется в вашем вопросеОтветы:
В окне терминала вы обычно набираете Control+, Zчтобы «приостановить» процесс, а затем используете
bg
команду для «фонового» его.например, с командой сна
Мы видим, что процесс запущен, и у меня все еще есть моя командная строка.
источник
fg
команды, которая принимает идентификатор задания (1
в данном случае указанный в скобках ) в качестве параметра. Это не является специфическим для использованияbg
и может быть сделано на процессах, запущенных с&
.Ctrl+ Zэто способ сделать это, но только для полноты: вопрос требует «команды», и это будет (из другого терминала):
а потом конечно
из терминала приложения.
источник
В Баше:
Ctrl+ Zа потом
bg
.Теперь бегите
jobs
и посмотрите результат.источник
/bin/sh
и поэтому это не сработало бы :-)В качестве меры предосторожности, связанной с неудобством необходимости нажимать CTRL- z, вы можете сделать скрипт-редактор для вашего редактора, который будет запускать ваш редактор в фоновом режиме. Таким образом, вам не нужно заботиться о том, чтобы не забыть явно запустить его в фоновом режиме:
Выше мы сначала попытаемся определить, доступен ли у вас X-сервер, и только потом запускать редактор в фоновом режиме (если нет, многие редакторы Unix вместо этого будут использовать ваш терминал, и вы не хотите запускать редактор в качестве фонового процесса в этом случае) , Он передаст все аргументы вашему редактору verbatim (
"$@"
) точно так же, как вы указали для сценария оболочки.Что касается команды, которую вы пропустили ... Согласно моим основным экспериментам, для программ с графическим интерфейсом, которые не используют терминал, это может быть так же просто, как сначала отправить,
SIGSTOP
а затемSIGCONT
в процесс переднего плана (используяkill
команду, если вы используете сценарий оболочки для реализации этого) , Вам, конечно, нужно будет запустить его в другом окне / вкладке терминала, и сложность будет заключаться в том, чтобы удобно и в общем случае найти PID, на который вы хотите отправить свой сигнал. По умолчанию вы можете отправить два сигнала всем процессам с заданным именем (по умолчанию ваш любимый редактор и разрешить использование PID в качестве аргументов):Этот метод правильно дал мне мои терминальные вкладки после выполнения (нескольких)
emacs
команд в фоновом режиме. Но процесс emacs, запущенный в терминале, не был должным образом восстановлен из-за управления работой оболочки или путаницы в настройках терминала. Таким образом, этот метод выиграл бы от некоторой изощренности.Это
SIGSTOP
именно то, что отправляется на передний план процесса, когда вы нажимаете (по умолчанию) CTRL- z. Обратитесь кstty -a
выводу(сокращенный вывод) и
stty
страница справочника:Процессы, остановленные с использованием
SIGSTOP
сигнала, можно перезапустить, отправивSIGCONT
. Обычно это управляющая логика оболочки работы , которая будет отправитьSIGCONT
и заботиться о других необходимых манипуляциях , связанных сfg
иbg
командами , которые мы игнорируем.источник