Sobes.tech
Back to questions
Senior
7

Какие способы межпроцессного взаимодействия (IPC) существуют в Linux? Чем отличаются SIGTERM и SIGKILL?

Companies where asked
VK CloudVK Cloud

Answer from AI

sobes.tech AI

В Linux существуют различные способы межпроцессного взаимодействия (IPC):

  • Каналы (Pipes) — позволяют передавать данные между процессами, связанными родительскими отношениями.
  • Именованные каналы (Named Pipes, FIFO) — похожи на каналы, но имеют имя в файловой системе и могут использоваться между любыми процессами.
  • Сокеты — позволяют обмениваться данными между процессами на одном или разных хостах.
  • Общая память (Shared Memory) — выделяет область памяти, доступную нескольким процессам для быстрой передачи данных.
  • Семафоры — используются для синхронизации доступа к ресурсам.
  • Сообщения (Message Queues) — позволяют отправлять и получать структурированные сообщения.
  • Сигналы — асинхронные уведомления о событиях.

Разница между SIGTERM и SIGKILL:

  • SIGTERM (15) — это сигнал запроса на завершение процесса. Процесс может перехватить этот сигнал, выполнить очистку и корректно завершиться. Это "вежливый" способ остановить процесс.

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

В Go для работы с сигналами используется пакет os/signal, который позволяет перехватывать и обрабатывать сигналы, например:

import (
    "os"
    "os/signal"
    "syscall"
    "fmt"
)

func main() {
    sigs := make(chan os.Signal, 1)
    signal.Notify(sigs, syscall.SIGTERM, syscall.SIGINT)

    sig := <-sigs
    fmt.Println("Получен сигнал:", sig)
    // Здесь можно выполнить очистку перед завершением
}