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


64

Я сталкиваюсь с такой ситуацией много раз.

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

sudo emacs tet.c &

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

введите описание изображения здесь

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

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

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

Ответы:


79

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

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

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

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

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


Для меня это всегда телнет. Я забыл quit:) (см superuser.com/questions/486496/how-do-i-exit-telnet )
cmroanirgo

1
Итак, я просто дважды нажал Ctrl + d (!) И получил то же сообщение после первого. Есть ли способ выяснить, какую работу я только что убил?
Матсмат

20

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

Вы можете перечислить их запуск / остановленные работы, выполнив: 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для пользователя


6

При возникновении ошибки остановленных заданий :

  1. введите jobs-> вы увидите задания с остановленным статусом
  2. а затем наберите exit-> вы можете выйти из терминала
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.