У меня есть процесс, первоначально запущенный на переднем плане. Я приостановил на Ctrl+ Z, а затем возобновил его работу в фоновом режиме bg <jobid>
.
Интересно, как приостановить процесс, работающий в фоновом режиме?
Как вывести фоновый процесс на передний план?
Редактировать:
Процесс выводит на stderr, так как мне выполнить команду, fg <jobid>
пока процесс выводит на терминал?
fg <jobid>
чтобы сделать его приоритетным?Ответы:
Как сказал Тим, наберите,
fg
чтобы вернуть последний процесс на передний план.Если у вас есть несколько процессов, работающих в фоновом режиме, сделайте это:
fg %3
вернутьvim 23
процесс на первый план.Чтобы приостановить процесс, работающий в фоновом режиме, используйте:
Сигнал SIGSTOP останавливает (приостанавливает) процесс по существу так же, как это делает Ctrl+ Z.
Пример:
kill -STOP %3
.источники: как посылать сигналы процессам в Linux и Unix и как управлять фоновыми и приоритетными заданиями .
источник
SIGCONT
для меня; Я все равно используюkill -STOP
иkill -CONT
предпочитаю запоминать числа, но вы можете проверить,kill -l
чтобы напомнить себе о числовых значенияхjob
иfg <jobid>
пока процесс выводится на терминал?kill -STOP %job_id
, как объясненоЭто должно относиться к любой оболочке с контролем заданий, которую (по большей части) вы можете принять как должное, если не имеете дело с действительно древней оболочкой. Он соответствует стандарту POSIX , поэтому даже
dash
поддерживает управление заданиями (при запуске в интерактивном режиме или с помощью-m
).интерактивный
bg
создаст фон для самой последней приостановленной программы(используйте
bg %2
номер задания, который вы можете проверитьjobs
)fg
выдвинет на первый план самую последнюю приостановленную программуВ
zsh
, вы можете написать привязку ключа для неявного запускаfg
из приглашения через другой Ctrl+ z:Вероятно, есть и умный способ неявного запуска
bg
при приостановке, но он кажется неразумным; по крайней мере для меня, большинство моих Ctrl+ zиспользований, потому что Ctrl+ cне в состоянии вспыхнуть; Я хочу следовать этому, например,kill %1
вместоbg
, и я, конечно же, не хочу по умолчанию убивать! (Эта логика также распространяется на то, почему я больше не использую эту привязку клавиш: если я нажимаю Ctrl+, zчтобы остановить процесс, последнее, что я хочу, это возобновить!)Неинтерактивный
Если вы находитесь в другом экземпляре оболочки (или у другого пользователя, иногда с
sudo
командами), вы, скорее всего, не сможете использовать рабочие номера.Вы по-прежнему можете работать с другим процессом, узнав его идентификатор процесса (PID). Вы можете получить PID с помощью
pgrep …
, илиps aux |grep …
(или из той же оболочкиjobs -l
, или$!
), и затем вы можете запустить:Если вы не знаете идентификатор процесса и не беспокоитесь о приостановке других экземпляров процесса по имени, вы можете передать сигналы одному из них:
CONT
Сигнал к программе останавливали Ctrl+ z(а неbg
«г) возобновит прогресс (на переднем плане), то же самое , как если бы вы былиfg
его.Re: Стандартная ошибка
Правка к этому вопросу спрашивает о стандартной ошибке:
Если в рассматриваемой работе нет компонентов, которые являются фоновыми (или вся работа является фоновой, возможно, через
kill -CONT
), вы фактически не должны видеть выходные данные, пока они приостановлены.Если он все еще выводит данные (будь то стандартный вывод или стандартная ошибка), это, безусловно, сделает ваш терминал визуально загроможденным, но весь этот вывод будет проигнорирован, поскольку он не является частью вашего ввода. Это может затруднить понимание того, что вы не ввели никаких опечаток, но (вслепую) набора текста
fg
Enterдолжно быть достаточно (если у вас нет нескольких заданий, а рассматриваемое не самое последнее, и в этом случае вам действительно понадобится дескриптор задания). ).Если вам нужно найти дескриптор задания, используйте другой терминал для отправки ему
STOP
сигнала с помощью неинтерактивных методов, описанных выше. Это должно освободить ваш дисплей (возможно, ударить Enterнесколько раз или запуститьclear
или Ctrl+ L), чтобы вы могли затем запустить,jobs
чтобы найти дескриптор задания, а затем запустить,fg %N
гдеN
это число.источник
CONT
сигнал процессу (заданию / конвейеру), остановленному с помощью Ctrl + Z, он возобновится в фоновом режиме, даже если вы этого не сделалиbg
.Типа,
fg
чтобы вывести его на передний план.источник
fg <jobid>
пока процесс выводит на терминал?jobs
командыfg
; например:fg %4
CTRL Z
чтобы приостановитьbg %4
источник
Завершение процесса может быть сделано несколькими различными способами. Часто из консольной команды отправка Ctrlcнажатия клавиши (символ прерывания по умолчанию) приводит к завершению команды. Это работает, когда процесс работает в режиме переднего плана.
Если процесс выполняется в фоновом режиме, то сначала вам нужно будет получить его Job ID с помощью
ps
команды, а затем вы можете использовать команду kill, чтобы завершить процесс следующим образом:Здесь
kill
команда завершитfirst_one
процесс. Если процесс игнорирует обычнуюkill
команду, вы можете использовать следующийkill -9
за ним идентификатор процесса:источник