ИТ Блог. Администрирование серверов на основе Linux (Ubuntu, Debian, CentOS, openSUSE)

SIGTERM против SIGKILL: в чем разница?

SIGTERM против SIGKILL: в чем разница?

Завершение процесса является важной частью управления процессами в 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?

Хотя оба эти сигнала используются для уничтожения процесса, между ними есть некоторые различия:

Некоторые пользователи Linux привыкли использовать kill -9, и этого следует избегать. Если у вас нет процесса без ответа, вам не нужно использовать SIGKILL.

С помощью SIGTERM процесс получает время для отправки информации своим родительским и дочерним процессам. Это дочерние процессы обрабатываются init.

Использование SIGKILL может привести к созданию процесса зомби, потому что уничтоженный процесс не получает возможности сообщить своему родительскому процессу, что он получил сигнал уничтожения.

Мы надеемся, что вы теперь лучше понимаете, как убить процесс с помощью SIGTERM или SIGKILL.

Если у вас есть какие-либо вопросы или предложения, пожалуйста, не стесняйтесь оставлять комментарии.

Exit mobile version