Я получаю сообщение, There are stopped jobs.
когда пытаюсь иногда выйти из оболочки bash. Вот воспроизводимый сценарий в Python 2.x:
- ctrl+ cобрабатывается интерпретатором как исключение.
- ctrl+ z«останавливает» процесс.
- ctrl+ dвыход из питона для реалов.
Вот некоторые из реальных выводов терминала:
example_user@example_server:~$ python
Python 2.7.3 (default, Sep 26 2013, 20:03:06)
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>
ctrl+z
[1]+ Stopped python
example_user@example_server:~$ exit
logout
There are stopped jobs.
Баш не exit
вышел , я должен снова выйти из оболочки Баш.
- В: Что такое «остановленная работа» или что это значит?
- В: Можно ли возобновить остановленный процесс?
- Q: Первый
exit
убивает остановленные задания? - Q: Есть ли способ выйти из оболочки в первый раз? (без ввода
exit
дважды)
Ответы:
Остановленное задание - это задание, которое было временно переведено в фоновый режим и больше не выполняется, но все еще использует ресурсы (т. Е. Системную память). Поскольку это задание не подключено к текущему терминалу, оно не может произвести вывод и не получает ввод от пользователя.
Вы можете увидеть выполняемые вами задания, используя
jobs
встроенную команду в bash, возможно, и другие оболочки. Пример:Вы можете возобновить остановленную работу с помощью
fg
встроенной команды (на переднем плане) bash. Если у вас есть несколько команд, которые были остановлены, вы должны указать, какую из них возобновить, передав в командной строке номер спецификаций заданийfg
. Если остановлена только одна программа, вы можете использоватьfg
только:В этот момент вы вернулись в интерпретатор python и можете выйти, используя control-D.
И наоборот, вы можете
kill
использовать команду с указанием ее задания или PID. Например:Чтобы использовать спецификацию заданий, перед числом введите клавишу процента (%):
Если вы выполните команду выхода с остановленными заданиями, появится предупреждение, которое вы увидели. Работы будут оставлены для безопасности. Это делается для того, чтобы вы знали, что пытаетесь убить работу, о которой забыли, что остановились. При втором использовании команды выхода задания завершаются, и оболочка завершается. Это может вызвать проблемы для некоторых программ, которые не предназначены для уничтожения таким способом.
В bash кажется, что вы можете использовать
logout
команду, которая убьет остановленные процессы и завершит работу. Это может привести к нежелательным результатам.Также обратите внимание, что некоторые программы могут не завершиться таким образом, и ваша система может закончить множеством потерянных процессов, используя ресурсы, если вы сделаете это привычкой.
Обратите внимание, что вы можете создать фоновый процесс, который остановится, если потребуется ввод данных пользователем:
Вы можете возобновить и убить эти задания так же, как вы выполняли задания, которые были остановлены с помощью
Ctrl-z
прерывания.источник
Остановленное задание означает процесс, который получил сигнал остановки (
SIGSTOP
/SIGTSTP
) от клавиатуры (символ приостановки Ctrl-Z), команды (напримерkill -STOP [PID]
) или другого процесса (например, ядро, когда у системы недостаточно ресурсов), и он находится в состоянии паузы, поэтому он сообщает системе остановить / приостановить процесс, поэтому он не будет выполнять / обработку.Активные работы оболочек могут быть перечислены:
jobs
.Остановленный процесс возобновит выполнение, только если ему будет отправлен
SIGCONT
сигнал. Это может быть достигнуто либоfg
(илиfg ID
), который переместит задание на передний план, делая его текущим заданием,bg
продолжить его в фоновом режиме, либо отправивSIGCONT
сигнал (напримерkill -CONT [PID]
).В первый раз, когда вы нажимаете
exit
/logout
или нажимаете Ctrl-D, оболочка печатает предупреждающее сообщение о текущих активных заданиях, связанных с вашим терминалом, поэтому она не убьет вас без вашего разрешения, подтвердив действие во второй раз. Еслиcheckjobs
опция включена (shopt -s checkjobs
), она также может перечислять задания с их статусами.Вы можете нажать Ctrl+Dдва раза или удерживать его дольше, это приведет к быстрому выходу из оболочки, убивая текущие остановленные / запущенные задания shel.
В качестве альтернативы открестился их (
disown
) , чтобы оставить их или убить их вручнуюkill $(jobs -p)
.источник