Як можна відновити зупинену роботу в Linux?


342

Як можна відновити зупинену роботу в Linux? Я використовував emacs і випадково потрапив на ctrl-z, який повернув мене до консолі. Я бачу це, коли набираю "робочі місця"

[*****]$ jobs
[1]+  Stopped                 emacs test_queue.cpp

Це насправді досить нормальний робочий потік для Vim, якщо ви хочете зберігати команди в історії вашої баш, то ви натискаєте Ctrl-zнабирати свої команди, а потім відновите. Очевидно, ви можете запускати команди, не виходячи з Vim через команду :!ed
icc97

Відповіді:


381

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


59
Для довідки, fg - "передній план". Ви також можете продовжити роботу у фоновому режимі з "bg".
Сірекс

260

Загальними командами управління роботою в Linux є:

  • вакансії - перерахуйте поточні завдання
  • fg - відновіть наступну роботу в черзі
  • fg% [кількість] - відновити роботу [кількість]
  • bg - натисніть на наступне завдання в черзі на другий план
  • bg% [число] - висуньте завдання [число] на другий план
  • kill% [число] - Убити завдання, пронумероване [число]
  • kill - [сигнал]% [число] - Надіслати сигнал [сигнал] на номер завдання [номер]
  • disown% [number] - відмовиться від процесу (більше терміналу не буде власником), тому команда буде жива навіть після закриття терміналу.

Це майже всі вони. Зверніть увагу на% infront номера завдання в командах - це те, що вбиває, ви говорите про завдання, а не про процеси.


30
Я уникаю "вбити% 1", тому що зазіхати як "вбити 1" насправді погано :)
barrycarter

5
@barrycarter Це дуже правда. Я, як правило, роблю fgі а Ctrl-C;)
Маєнко

6
@barry: Ось чому init в Upstart ігнорує SIG {TERM, KILL} за замовчуванням.
Привіт71

7
І, звичайно, "ніколи не запускай як корінь";)
barrycarter

47

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


Дуже добре знати
ZAD-Man

33

Просто для додання інших відповідей, bash дозволяє пропустити, fgякщо ви вказали номер роботи.

Наприклад, вони рівноцінні та відновлять останню роботу:

%
%%
fg
fg %

Ці резюме на роботі №4:

%4
fg 4

2
У той час як це круто, я все ще знаходжу це простіше набрати fgніж %.
rr-

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


2
Це також працює, якщо ви
відмовились

чи можете ви також отримати доступ до його вводу / виводу, як це відбувається, коли ви говорите fg?
Ciprian Tomoiagă

Це набагато гнучкіший підхід, ніж робота з номером роботи. Пальці вгору.
thomp45793
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.