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

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

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

sudo emacs tet.c &

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

введите описание здесь

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

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

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

3 ответа

Решение

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', чтобы вернуть задание на передний план и так далее.

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

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

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

  • переместить последнюю работу на передний план: fg,
  • бежать 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 -> вы можете выйти из терминала
Другие вопросы по тегам