Що мені робити, коли я отримую помилку "Зупинено роботу"?


62

Я стикаюся з таким типом ситуації багато разів.

Наприклад, коли я намагаюся відкрити якийсь файл emacsіз sudoправами, використовуючи:

sudo emacs tet.c &

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

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

У мене є два питання, пов'язані з цим:

  1. Що мені робити, коли я отримую помилку, що "Зупинені робочі місця"? Як я ідентифікую всі такі припинені роботи та вбиваю їх? Як тільки я очищую термінал, я не матиму під цих зупинених процесів.

  2. Чому Ubuntu / emacs поводиться так? Чому він не запитує мене паролем?

Відповіді:


77

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', щоб повернути роботу на перший план тощо.


Для мене його завжди telnet. Я забув quit:) (див superuser.com/questions/486496/how-do-i-exit-telnet )
cmroanirgo

1
Отже, я просто натиснув Ctrl + d двічі (!) І отримав те саме повідомлення після першого. Чи є спосіб зрозуміти, яка була робота, яку я щойно вбив?
Matsmath

19

Ви отримали повідомлення, оскільки система попереджає вас про активні завдання, пов’язані з вашою поточною оболонкою.

Ви можете перерахувати їх запуск / зупинені роботи, виконавши: jobs,

Тоді ви можете зробити одне з наступного:

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

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


Щоб відповісти на запитання про sudoце, він не запитає вас про пароль, оскільки для отримання пароля від стандартного введення потрібно мати активний термінал , а запускаючи його фоном, оболонка не чекає завершення команди , тому у вас немає можливості взаємодіяти з командою.

У цьому випадку у вас є три можливості:

  • запустити команду, не переходячи до фону ( &),
  • читати пароль із стандартного вводу замість термінального пристрою, 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.