Проверяет понимание различий между сигналами завершения процессов SIGTERM и SIGKILL в Unix-подобных системах.
Сигналы SIGTERM и SIGKILL используются для завершения процессов в Unix-подобных операционных системах, но они принципиально отличаются по своему поведению. SIGTERM (сигнал 15) — это «мягкий» сигнал, который запрашивает у процесса завершение работы. Процесс может перехватить этот сигнал, выполнить необходимые действия (например, сохранить данные, закрыть файлы) и завершиться корректно. SIGKILL (сигнал 9) — это «жёсткий» сигнал, который немедленно уничтожает процесс без возможности перехвата или обработки.
Когда вы отправляете SIGTERM процессу, ядро передаёт сигнал, и процесс может либо завершиться по умолчанию, либо установить обработчик сигнала через системный вызов signal() или sigaction(). Это позволяет приложению выполнить очистку ресурсов, сохранить состояние и корректно завершиться. В отличие от этого, SIGKILL не может быть перехвачен, заблокирован или проигнорирован — ядро немедленно удаляет процесс из системы, не давая ему возможности выполнить какие-либо действия.
В командной строке вы можете отправить сигналы с помощью команды kill. Например:
# Отправить SIGTERM процессу с PID 1234
kill 1234
# Отправить SIGKILL процессу с PID 1234
kill -9 1234В коде на Node.js можно обработать SIGTERM для корректного завершения сервера:
process.on('SIGTERM', () => {
console.log('Получен SIGTERM, завершаюсь...');
server.close(() => {
process.exit(0);
});
});В реальной практике рекомендуется сначала отправлять SIGTERM, чтобы дать процессу возможность завершиться корректно. Если процесс не завершается в течение разумного времени (например, 10–30 секунд), можно отправить SIGKILL для принудительного завершения. Это особенно важно для серверов и баз данных, где потеря данных или повреждение файлов могут быть критичны.
Вывод: SIGTERM — это вежливый способ завершения, который следует использовать по умолчанию, а SIGKILL — крайняя мера для зависших или неотвечающих процессов. Понимание этой разницы помогает избежать потери данных и обеспечивает стабильность систем.