Что мне делать, когда я получаю сообщение об ошибке "Есть остановленные задания"?

Я много раз сталкивался с подобными ситуациями.

Например, всякий раз, когда я пытаюсь открыть какой-либо файл в emacs с sudo права, используя:

sudo emacs tet.c &

Вместо того, чтобы спрашивать у меня пароль, Ubuntu просто запускается emacs процесс без каких-либо emacs окно или любой вывод на терминале (кроме pid) см. Изображение (если я не использую '& amp;', то он запросит у меня пароль):

enter image description here

У меня есть два вопроса, связанных с этим:

  1. Что мне делать, когда я получаю сообщение об ошибке "Есть остановленные задания"? Как мне определить все такие остановленные задания и уничтожить их? Как только я очищу определение, у меня не будет pid этих остановленных процессов.

  2. Почему Ubuntu/emacs ведет себя подобным образом? Почему он не запрашивает у меня пароль?

There are stopped jobs сообщение является далеко, далеко отсюда быть ошибкой. Это просто уведомление, сообщающее вам, что вы пытаетесь выйти из командной оболочки, но у вас есть одно или несколько приостановленных заданий / программ (в вашем случае emacs который вы поместили в фоновом режиме, используя & в конце вашей команды). Система не позволяет вам выходить из оболочки и завершать работу, если вы этого не хотите. Вы можете сделать несколько вещей в ответ на это сообщение:

  • использовать jobs команда, чтобы сообщить вам, какую работу (ы) вы приостановили
  • вы можете выбрать добавление задания (заданий) на передний план с помощью fg команда
  • если вам все равно, завершатся ли задания, вы можете просто ввести exit снова; набрав exit во второй раз с вмешательством или без него jobs команда приведет к завершению всех приостановленных заданий.

Чтобы ответить на второй вопрос, я скажу вам, что ни Ubuntu, ни emacs не ведут себя подобным образом. Это нормальное поведение, когда вы запускаете приложение в фоновом режиме. В этом случае sudo запрашивает пароль, но запрашивает в фоновом режиме, поэтому вы не можете видеть этот факт. Чтобы увидеть это, вы должны вернуть задание на передний план, используя fg команда:

radu@Radu: ~ $ sudo emacs tet.c &[1] 7732radu@Radu: ~ $ # now sudo emacs run in background so you can't see nothing about what's happeningradu@Radu: ~ $ fg[sudo] password for radu:

После этого вы можете ввести Ctrl+Z чтобы снова перевести задание в фоновый режим, если хотите. Затем вы можете снова запустить команду "fg", чтобы вернуть задание на передний план и так далее.

Вы получили сообщение, потому что система предупреждает вас об активных заданиях, связанных с вашей текущей оболочкой.

Вы можете перечислить эти запущенные / остановленные задания, выполнив: jobs,

Затем вы можете выполнить одно из следующих действий:

  • переместить последнее задание на передний план с помощью: fg (противоположность bg для справки),
  • бежать disown чтобы удалить эти задания из вашей текущей оболочки, не убивая их,
  • принудительный выход из системы, завершив выполнение этих задач нажатием Ctrl+D дважды, то же самое, что печатать exit/logout дважды,
  • завершите эти задания вручную, выполнив: kill $(jobs -p) (добавить -9 для силы)
  • если вы отрекаетесь от них и все равно хотите уничтожить все остановленные процессы, попробуйте:

    kill $(ps wuax | awk 'NR>1 && $8 ~ "T" {print $2}')


Чтобы ответить на вопрос о sudo, он не будет запрашивать у вас пароль, так как для получения пароля от стандартный ввод, и, запустив его в фоновом режиме, оболочка не ждет завершения команды, поэтому у вас нет возможности взаимодействовать с командой.

В этом случае у вас есть 3 возможности:

  • запустите команду, не переходя в фоновый режим (&),
  • считайте пароль со стандартного ввода вместо терминального устройства с помощью sudo -S напр.

    echo mypass | sudo emacs tet.c
  • настройте sudo так, чтобы он не запрашивал пароль с помощью: visudo управление и редактирование sudoers файл. Видеть: Включить NOPASSWD для пользователя

Когда вы сталкиваетесь есть остановленные рабочие места ошибка:

  1. типjobs>-- вы увидите задания со статусом остановлено
  2. а затем введите exit>-- вы можете выйти из терминала