Как я могу возобновить остановленную работу в Linux?

344

Как я могу возобновить остановленную работу в Linux? Я использовал emacs и случайно нажал Ctrl-Z, что вернуло меня обратно в консоль. Я вижу это, когда набираю «работа»

[*****]$ jobs
[1]+  Stopped                 emacs test_queue.cpp
Бобби
источник
На самом деле это довольно нормальный рабочий процесс для Vim, если вы хотите сохранить свои команды в своей истории bash, тогда вы нажимаете Ctrl-zклавишу, а затем возобновляете. Очевидно, что вы можете запускать команды, не выходя из Vim с помощью команды :!ed
icc97

Ответы:

384

Команда fg- это то, что вы хотите использовать. Вы также можете указать номер задания, если остановлено несколько заданий.

Илкка
источник
59
для справки, fg - "передний план". Вы также можете продолжить работу в фоновом режиме с помощью «bg».
Sirex
261

Общие команды управления заданиями в Linux:

  • jobs - список текущих работ
  • fg - возобновить работу, которая следующая в очереди
  • fg% [число] - возобновить работу [номер]
  • bg - выдвинуть следующее задание в очереди в фоновый режим
  • bg% [число] - отодвинуть задание [число] на задний план
  • kill% [число] - убить задание с номером [число]
  • kill - [сигнал]% [номер] - отправить сигнал [сигнал] на номер задания [номер]
  • disown% [число] - отменить процесс (терминал больше не будет владельцем), поэтому команда будет активна даже после закрытия терминала.

Это почти все из них. Обратите внимание на% infront номера задания в командах - это то, что говорит kill, вы говорите о заданиях, а не процессах.

Majenko
источник
30
Я избегаю "kill% 1", потому что опечатка как "kill 1" действительно очень плоха :)
barrycarter
5
@ barrycarter Это очень верно. Я обычно делаю fgи Ctrl-C;)
Majenko
6
@barry: Именно поэтому init в Upstart по умолчанию игнорирует SIG {TERM, KILL}.
Привет71,
7
И, конечно же, "никогда не запускайте как root";)
barrycarter
47

Вы также можете ввести %<process_name>; то есть вы нажимаете Ctrl-Z в emacs, затем вы можете набрать %emacsконсоль и вернуть ее на передний план.

NickD
источник
Очень приятно знать
ZAD-Man
33

Просто чтобы добавить к другим ответам, Bash позволяет пропустить, fgесли вы указали номер работы.

Например, они эквивалентны и возобновляют последнюю работу:

%
%%
fg
fg %

Это резюме работы № 4:

%4
fg 4
grawity
источник
2
Хотя это круто, мне все же легче набирать текст, fgчем %.
10-14
3
%это здорово, спасибо! Как машинистка на ощупь, я нахожу fgочень раздражающим (тот же палец). Но тогда так и есть cd.
Готье
И вы можете запустить его в фоновом режиме с любым bg %или просто % &.
Wildcard
в моем случае, когда я пытался использовать fg, я вижу, что остановленный процесс появляется и быстро исчезает, и только <fg%> удалось его восстановить.
Лефи Тарик
20

Если вы не запускали его с текущего терминала, используйте, ps aux | grep <process name>чтобы найти номер процесса (pid), а затем возобновите его с помощью:

kill -SIGCONT <pid>

(Несмотря на название, killэто просто инструмент для отправки сигнала процессу, позволяющий процессам связываться друг с другом. «Сигнал уничтожения» - это только один из многих стандартных сигналов.)

Дополнительный совет: оберните первый символ имени процесса, []чтобы сама grepкоманда не появлялась в результатах. например, чтобы найти emacsпроцесс, используйтеps aux | grep [e]macs

mahemoff
источник
2
Это также работает, если вы
отрекаетесь
Вы также можете получить доступ к его вводу / выводу, как это происходит, когда вы говорите fg?
Ciprian Tomoiagă
Это гораздо более гибкий подход, чем работа с номером работы. Пальцы вверх.
thomp45793