Я много раз сталкивался с подобными ситуациями.
Например, всякий раз, когда я пытаюсь открыть какой-либо файл в emacs
с sudo
права, используя:
sudo emacs tet.c &
Вместо того, чтобы спрашивать у меня пароль, Ubuntu просто запускается emacs
процесс без каких-либо emacs
окно или любой вывод на терминале (кроме pid) см. Изображение (если я не использую '& amp;', то он запросит у меня пароль):
У меня есть два вопроса, связанных с этим:
Что мне делать, когда я получаю сообщение об ошибке "Есть остановленные задания"? Как мне определить все такие остановленные задания и уничтожить их? Как только я очищу определение, у меня не будет pid этих остановленных процессов.
Почему 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
для пользователя
Когда вы сталкиваетесь есть остановленные рабочие места ошибка:
- тип
jobs
>-- вы увидите задания со статусом остановлено
- а затем введите
exit
>-- вы можете выйти из терминала