Выполняет ли команда уничтожения Unix, что динамически распределенная память вернется должным образом?

Я нашел кучу скриптов в проекте, который я недавно назначил, это сценарии "shutdown". Они просто выполняют некоторые базовые поиски и запускают команду Unix kill. Есть ли причина, по которой они не должны останавливать процесс таким образом? Означает ли это, что динамически распределенная память вернется должным образом? Есть ли другие негативные последствия? Я работал под интуицией, что это последний способ прекращения процесса.

6 ответов

Команда kill отправляет сигнал в процесс Unix. Этот сигнал по умолчанию соответствует SIGTERM, который является вежливым запросом для выхода программы.

Когда процесс выходит по какой-либо причине, Unix OS выполняет очистку своих распределений памяти, файлов и других ресурсов. Единственными ресурсами, которые не очищаются, являются те, которые должны быть разделены, например, содержимое файлов и разделяемой памяти (например, System V IPC).

Многим программам не нужно выполнять какую-либо специальную очистку при выходе и использовать поведение по умолчанию SIGTERM, что позволяет ОС остановить процесс.

Если программа нуждается в специальном поведении, она может установить обработчик сигнала, а затем может запускать функцию для обработки сигнала.

Теперь сигнал SIGKILL, который является номером 9, является злом, но также необходим. Этот сигнал никогда не доходит до самого процесса, ОС просто останавливает процесс. Это следует использовать, когда действительно, действительно необходимо. Это часто становится необходимым в многопоточных программах, которые попадают в тупики или программы, которые установили обработчик сигнала TERM, но прикручиваются во время их выхода.


kill - это вежливый запрос для завершения программы. Он очищает память, закрывает ручки и другие подобные приятные ощущения. Он отправляет SIGTERM

kill -9 сообщает операционной системе, чтобы захватить процесс шарами и выбросить его из бара. Обильно он не заботится о симпатиях - хотя он и восстанавливает всю память, так как она отвечает за операционную систему, чтобы отслеживать это. Но из-за сильного отключения вы можете столкнуться с проблемами при повторном запуске программы (например, при очистке файлов .pid)

См. также [wikipedia] (http://en.wikipedia.org/wiki/Kill_(Unix)


Каждый процесс запускается в собственном защищенном адресном пространстве, а когда процесс завершается (независимо от того, выходит ли он добровольно или убит внешним сигналом), адресное пространство полностью исправлено. Так что да, все, если его память будет выпущена должным образом.

В зависимости от процесса, он может или не может вызвать другие проблемы при следующем запуске. Например, у него могут быть открытые файлы и оставить их в несогласованном состоянии, если они неожиданно убили. (Файлы будут закрыты автоматически, но могут быть, например, в середине написания некоторых данных приложения, и файлы могут содержать неполные/несогласованные данные, если они прерваны.)

Обычно, когда система выключается, все процессы будут посылать сигнал 15 (SIGTERM), при котором они могут выполнять любые действия по очистке/выключению, которые им необходимо выполнить. Затем, спустя короткое время, они получат сигнал 9 (SIGKILL), который сразу же убивает их, не давая им никаких шансов хоть как-то отреагировать. Это дает всем процессам возможность очистить себя, а затем насильно убивает любые процессы, которые не реагируют оперативно.


kill по умолчанию отправит сигнал завершения, который позволит процессу выйти изящно. Если процесс, похоже, не сработает своевременно, некоторые скрипты затем вернутся на kill -9, который заставляет выход "готов или нет".

Во всех случаях операционные системы, управляемые ОС, такие как динамическая память, будут возвращены, файлы закрыты и т.д. Но уровень приложения не может быть убран при -9 kill.


kill -9

- последнее, а не kill.

  • Да исправлена ​​память (это ответственность ОС)
  • Программы могут реагировать на сигнал, но они хотят, чтобы конкретная программа выполняла "правильную вещь".


kill просто посылает сигнал процессу. Процесс может захватывать сигналы (за исключением сигнала 9) и запускать код для выполнения выключения. Выключение приложения должно быть кратким, но это может быть не мгновенно.

В любом случае, как только процесс завершится, операционная система вернет динамически выделенную память, закроет дескрипторы открытых файлов и другие ресурсы.

Могут существовать некоторые ресурсы, которые выживают, например, если в приложении хранится разделяемая память или сокеты, которые также хранятся в других (все еще живых) процессах.

licensed under cc by-sa 3.0 with attribution.