Завершение процесса является важной частью управления процессами в Linux.
Поскольку управление процессами является отдельной темой, мы не будем подробно останавливаться на управлении пользовательскими процессами и обработке сигналов в этом посте.
Мы собираемся сосредоточиться на использовании сигналов SIGTERM и SIGKILL для завершения процесса. А также расскажем о том, почему вы должны избегать использования SIGKILL.
Что такое SIGTERM?
В UNIX-подобных системах сигнал SIGTERM используется для завершения программы. Вы можете догадаться об этом по его названию, которое состоит из SIGnal и TERMinate.
SIGTERM также может называться «мягким уничтожением», поскольку процесс, который получает сигнал SIGTERM, может игнорировать его.
Другими словами, это вежливый способ убить процесс.
Как отправить SIGTERM процессу в Linux?
Команда kill в Linux используется для отправки всех таких сигналов процессам.
По умолчанию команда kill отправляет сигнал SIGTERM. Вы можете явно указать это с -15, но это излишне.
Вам нужно знать pid процесса, чтобы использовать эту команду следующим образом:
kill <process_id>
Вы можете использовать команду ps в Linux, чтобы получить идентификатор процесса.
Что такое SIGKILL?
SIGKILL используется для немедленного прекращения процесса. Этот сигнал нельзя игнорировать или заблокировать. Процесс будет завершен вместе с его потоками (если есть).
Это жесткий способ убить процесс, и его следует использовать только как последнее средство. Предположим, у вас есть не отвечающий процесс, который вы хотите закрыть. В таком случае можно использовать SIGKILL.
Как отправить SIGKILL процессу в Linux?
Вы можете использовать опцию -9, чтобы отправить сигнал SIGKILL с командой kill и немедленно завершить процесс:
kill -9 <process_id>
SIGTERM vs SIGKILL: Почему вы должны использовать SIGTERM вместо SIGKILL?
Хотя оба эти сигнала используются для уничтожения процесса, между ними есть некоторые различия:
- SIGTERM грациозно убивает процесс, тогда как SIGKILL немедленно убивает процесс.
- Сигнал SIGTERM может обрабатываться, игнорироваться и блокироваться, но SIGKILL не может быть обработан или заблокирован.
- SIGTERM не убивает дочерние процессы. SIGKILL также убивает дочерние процессы.
Некоторые пользователи Linux привыкли использовать kill -9, и этого следует избегать. Если у вас нет процесса без ответа, вам не нужно использовать SIGKILL.
С помощью SIGTERM процесс получает время для отправки информации своим родительским и дочерним процессам. Это дочерние процессы обрабатываются init.
Использование SIGKILL может привести к созданию процесса зомби, потому что уничтоженный процесс не получает возможности сообщить своему родительскому процессу, что он получил сигнал уничтожения.
Мы надеемся, что вы теперь лучше понимаете, как убить процесс с помощью SIGTERM или SIGKILL.
Если у вас есть какие-либо вопросы или предложения, пожалуйста, не стесняйтесь оставлять комментарии.