Терминал в конце электрического провода, оболочка является домом черепахи, tty является странным сокращением, и консоль является своего рода корпусом.
Ну, этимологически разговор, так или иначе.
В терминологии Unix короткий ответ - это
Консоль, терминал и tty тесно связаны. Первоначально, они имели в виду элемент оборудования, через который Вы могли взаимодействовать с компьютером: в первые годы Unix, который означал устройство стиля телепринтера, напоминающее печатающее устройство, иногда названное телетайпом или “tty” в стенографии. Название “терминал” произошло с электронной точки зрения и имени “консоль” с точки зрения мебели. Очень рано в истории Unix, электронные клавиатуры и дисплеи стали нормой для терминалов.
В терминологии Unix tty является конкретным видом файла устройств, который реализует много дополнительных команд (ioctls) вне чтения и записи. В его наиболее распространенном значении терминал синонимичен с tty. Некоторые ttys обеспечиваются ядром от имени устройства, например, с входом, прибывающим из клавиатуры и вывода, идущего в экран текстового режима, или с вводом и выводом, переданным по последовательной линии. Другие ttys, иногда названные pseudo-ttys, обеспечиваются (через тонкий слой ядра) эмуляторами терминала вызываемого абонента программ, такими как Xterm (работающий в X-оконной системе), Экран (который обеспечивает слой изоляции между программой, и другой терминал), Ssh (который подключает терминал на одной машине с программами на другой машине), Ожидайте (для сценариев терминальных взаимодействий) и т.д.
Терминал слова может также иметь более традиционное значение устройства, через которое взаимодействует с компьютером, обычно с клавиатурой и дисплеем. Например, X терминалов являются своего рода тонким клиентом, компьютер специального назначения, чей только цель состоит в том, чтобы управлять клавиатурой, дисплеем, мышью и иногда другими человеческими периферийными устройствами взаимодействия, с реальными приложениями, работающими на другом, более мощном компьютере.
Консоль обычно является терминалом в физическом смысле, который является по некоторому определению основным терминалом, непосредственно подключенным к машине. Консоль появляется к операционной системе как (реализованный ядром) tty. В некоторых системах, таких как Linux и FreeBSD, консоль появляется как несколько ttys (специальный переключатель сочетаний клавиш между этими ttys); только, чтобы перепутать вопросы, имя, данное каждому конкретному tty, может быть “консолью””, виртуальная консоль””, виртуальный терминал” и другие изменения.
Оболочка является основным интерфейсом, который видят пользователи, когда они входят в систему, чья основная цель состоит в том, чтобы запустить другие программы. (Я не знаю, является ли исходная метафора то, что оболочка является домашней средой для пользователя, или что оболочка - то, в чем работают другие программы.)
В кругах Unix оболочка специализировалась для значения оболочки командной строки, центрируемой вокруг ввода имени приложения, которое каждый хочет запустить, сопровождаемый названиями файлов или других объектов, что приложение должно действовать на, и нажатие клавиши Enter. Другие типы сред не используют слово “оболочка”; например, оконные системы включают “менеджеры окон” и “настольные среды”, не “оболочку”.
Существует много различных оболочек Unix. Популярные оболочки для интерактивного использования включают Bash (значение по умолчанию на большинстве установок Linux), zsh (который подчеркивает питание, и настраиваемость) и рыба (который подчеркивает простоту).
Оболочки командной строки включают конструкции управления потоком для объединения команд. В дополнение к вводу команд при интерактивной подсказке пользователи могут записать сценарии. Наиболее распространенные оболочки имеют общий синтаксис на основе Bourne_shell. При обсуждении “программирования оболочки”, оболочка почти всегда подразумевается, чтобы быть оболочкой стиля Границы. Некоторые оболочки, которые часто используются для сценариев, но отсутствие усовершенствовало интерактивные функции, включают оболочку Korn (ksh) и много вариантов пепла. В значительной степени любой подобной Unix системе установили оболочку стиля Границы как /bin/sh
, обычно пепел, ksh или удар.
В системном администрировании Unix оболочка пользователя является программой, которая вызывается, когда они входят в систему. Учетные записи обычного пользователя имеют оболочку командной строки, но у пользователей с ограниченным доступом могут быть ограниченная оболочка или некоторая другая определенная команда (например, для единственных передачей файлов учетных записей).
Разделение труда между терминалом и оболочкой не абсолютно очевидно. Вот их основные задачи.
\e[D
). Оболочка преобразовывает управляющие последовательности в команды (например. \e[D
→ backward-char
).M-x shell
в Emacs.foo
”, “переключатель основной цвет к зеленому”, “перемещают курсор в следующую строку”, и т.д. Терминал действует на эти инструкции.Обычно необходимо использовать kill
(короткий для kill -s TERM
, или в большинстве систем kill -15
) прежде kill -9
(kill -s KILL
) для давания цели обрабатывают шанс вымыться после себя. (Процессы не могут поймать или проигнорировать SIGKILL
, но они могут и часто ловить SIGTERM
.), Если Вы не даете процессу шанс закончить то, что он делает и очищает, он может оставить поврежденные файлы (или другое состояние), вокруг которого он не сможет понять когда-то перезапущенный.
strace
/truss
, ltrace
и gdb
обычно хорошие идеи для взгляда на то, почему застревает застрявший процесс. (truss -u
на Солярисе особенно полезно; я нахожу ltrace
слишком часто аргументы подарков библиотеке звонят в неприменимый формат.) Солярис также имеет полезный /proc
- основанные инструменты, некоторые из которых были портированы к Linux. (pstack
часто полезно).
Randal Schwartz раньше часто отправлял "Бесполезное использование (x)" в списках. Одно такое сообщение было о kill -9
. Это включает причины и рецепт для следования. Вот восстановленная версия (заключена в кавычки ниже).
(Отвращение кавычки)
Нет нет нет. Не используйте уничтожают-9.
Это не дает процессу шанс чисто:
1) закройте сокетные соединения
2) очистите временные файлы
3) сообщите его детям, что это уходит
4) сбросьте его терминальные характеристики
и так далее и так далее и так далее.
Обычно отправьте 15 и ожидайте секунда или два, и если это не работает, отправьте 2, и если это не работает, отправьте 1. Если это не делает, УДАЛЯЕТ ДВОИЧНЫЙ ФАЙЛ, потому что программа плохо себя ведется!
Не используйте уничтожают-9. Не производите комбайн только для уборки цветочного горшка.
Просто другое Бесполезное Использование Usenet,
(.signature)
Никогда никогда не делайте a kill -9 1
. Также постарайтесь не делать, уничтожение на определенных процессах любят, монтируются'. Когда я должен уничтожить много процессов (скажите, например, что X сессий подвешиваются, и я должен уничтожить все процессы определенного пользователя), я инвертирую порядок процессов. Например:
ps -ef|remove all processes not matching a certain criteria| awk '{print $2}'|ruby -e '$A=stdin.readlines; A.reverse.each{|a| puts "kill -9 #{a}"}'|bash
Следует иметь в виду это kill
не останавливает процесс и высвобождает его средства. Все, что это делает, отправляют сигнал SIGKILL в процесс; Вы могли волновать с процессом, это подвешивается.
kill -9 1
просто проигнорирован под большинством нельдов. Нет никакой потребности избежать kill -9
для mount
, но никакой смысл в нем также. Я не знаю то, что Вы подразумеваете “под реверсом порядок процессов”. kill -9
действительно останавливает (как в, уничтожает), процесс, не давая ему шанс жаловаться, однако уничтожения сразу не произойдет, если процесс будет в непрерываемом системном вызове. Уничтожение процесса с kill -9
высвобождает большинство средств, но не все.
– Gilles 'SO- stop being evil'
09.03.2011, 23:01
Должно всегда быть нормально делать kill -9
, точно так же, как должно всегда быть нормально завершать работу путем получения по запросу силового кабеля. Это может быть антиобщественным, и оставить некоторое восстановление, чтобы сделать, но это должно работать и является электроинструментом для нетерпеливого.
Я говорю это как кто-то, кто попробует простое уничтожение (15) первый, потому что оно действительно дает программе шанс сделать некоторую очистку - возможно, просто пишущий в журнал, "выходящий на сигнале 15". Но я не приму жалобы на неблаговидные поступки на уничтожении-9.
Причина: много клиентов делает это к вещам, которые предпочли бы программисты, затем не делают. Случайное уничтожение-9 тестирований являются хорошим и справедливым сценарием тестирования, и если Ваша система не обрабатывает его, Ваша система, повреждается.
kill -9
точно так же, как не нормально отключать прочь. В то время как, конечно, существуют ситуации, где у Вас нет выбора, это должно быть действием последнего средства. Конечно, вытягивая силовой кабель или kill -9
не должен иметь отрицательных эффектов как предотвращение приложения или ОС для перезапуска правильно, если вообще, но дерьмо происходит и использование рекомендуемых путей (kill [-15]
) или регулярное завершение работы поможет предотвращению путаницы, которая могла бы произойти, если Вы обычно прерываете программы и Ose тот путь. В любом случае всегда существует риск потерять данные независимо от устойчивости кода.
– jlliagre
28.01.2014, 14:51
Я использую, уничтожают-9 почти таким же способом, которым я бросаю кухонные реализации в посудомоечную машину: если кухонная реализация разрушена посудомоечной машиной затем, я не хочу ее.
То же идет для большинства программ (даже базы данных): если я не могу уничтожить их без вещей, выходящих из строя, я действительно не хочу использовать их. (И если Вы, оказывается, используете одну из этих небаз данных, которая поощряет Вас притворяться, что они сохранили данные, когда они не имеют: хорошо, я предполагаю, что время, что Вы начинаете думать о том, что Вы делаете).
Поскольку в реальном мире материал может понизиться в любое время по любой причине.
Люди должны записать программное обеспечение, которое терпимо к катастрофическим отказам. В особенности на серверах. Необходимо изучить, как разработать программное обеспечение, которое предполагает, что вещи повредятся, откажут и т.д.
То же идет для программного обеспечения, установленного на компьютере. Когда я хочу закрыть свой браузер, он обычно берет ВОЗРАСТЫ для закрытий. Нет ничего, что мой браузер должен сделать, который должен взять больше, чем самое большее несколько секунд. Когда я прошу, чтобы это закрылось, этому должно удаться сделать это сразу. Когда это не делает, ну, в общем, затем, мы выходим из дела, уничтожают-9 и делают его.
Не упомянутый во всех других ответах случай где kill -9
не работает вообще, когда процесс <defunct>
и не может быть уничтожен:
Как я могу уничтожить <более не существующий> процесс, родитель которого является init?
Что является более не существующим для процесса и почему это не становится уничтоженным?
Таким образом, прежде чем Вы пытаетесь kill -9
a <defunct>
процесс выполняется ps -ef
видеть то, что его родитель и попытка -15
(ТЕРМИН) или -2
(INT) и наконец -9
(УНИЧТОЖЬТЕ) на его родителе.
Примечание: что ps -ef
делает.
Более позднее редактирование и осторожность: Соблюдите осторожность при уничтожении процессов, их родитель или их дети, потому что они могут оставить файлы открытыми или поврежденными, соединения незаконченный, могут повредить базы данных и т.д., если Вы не знаете что kill -9
делает для процесса, используют его только как последнее прибежище, и если необходимо работать, уничтожают, используют сигналы, указанные выше перед использованием -9 (KILL)
Согласно [1179052]man 7 сигнал[1179053]:
Вы должны убедиться, что перед отправкой сигнала процессу вы:
Убедитесь, что процесс не занят (т.е. делаете "работу"); отправка [1179358]kill -9[1179359] в процесс приведет, по сути, к потере этих данных.
Также, если вы хотите убить процесс и всех его дочерних процессов, войдите в привычку вызывать [1179945] kill[1179946] с отрицательным PID [1179947], а не только с самим PID[1179948]. Нет никакой гарантии, что [1179949]SIGHUP[1179950], [1179951]SIGPIPE[1179952] или [1179953]SIGINT[1179954] или другие сигналы очистят после этого, и иметь кучу отключенных процессов для очистки (помните дворнягу?) раздражает.
Bonus evil: [1180544]kill -9 -1[1180545] причиняет немного больше вреда, чем [1180546]kill -9 1[1180547] (Не делайте ни то, ни другое в качестве корня, если не хотите посмотреть, что происходит на бросовой, неважной ВМ)
Я создал скрипт, который помогает автоматизировать этот вопрос.
Он основан на моем полном ответе 2 на очень похожий вопрос на stackoverflow.
Вы можете прочитать все объяснения там. Подводя итог, я бы рекомендовал просто SIGTERM
и SIGKILL
, или даже SIGTERM
, SIGINT
и SIGKILL
. Однако я даю больше вариантов в полном ответе.
Пожалуйста, не стесняйтесь скачать (клонировать) его с github репозитория killgracefully 1
kill -9
имеет его использование, как последнее прибежище разделитель, акцент на последнее средство; администраторы, которые используют его перед последним средством a) не понимает быть администратором слишком хорошо и b) не должно быть в производственной системе. игра в песочнице seccomp хрома – Arcege 09.03.2011, 14:39