Back to questions
Senior
6
Какие сигналы ОС можно перехватить, а какие нет?
Companies where asked
Гос крипта
Answer from AI
sobes.tech AI
В операционных системах Unix-подобного типа (Linux, macOS) сигналы можно разделить на перехватываемые и неперехватываемые.
Перехватываемые сигналы — это те, для которых процесс может установить обработчик (signal handler). Например:
- SIGINT (прерывание, обычно Ctrl+C)
- SIGTERM (запрос на завершение)
- SIGHUP (перезагрузка терминала)
- SIGUSR1, SIGUSR2 (пользовательские сигналы)
Неперехватываемые сигналы — это сигналы, которые нельзя перехватить или игнорировать, так как они предназначены для немедленного завершения процесса или критических ситуаций:
- SIGKILL (немедленное завершение процесса)
- SIGSTOP (приостановка процесса)
Пример на Go для перехвата SIGINT:
import (
"os"
"os/signal"
"syscall"
"fmt"
)
func main() {
sigs := make(chan os.Signal, 1)
signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM)
go func() {
sig := <-sigs
fmt.Println("Получен сигнал:", sig)
// обработка сигнала
os.Exit(0)
}()
select {} // ожидание сигнала
}
Таким образом, можно перехватывать большинство сигналов, кроме SIGKILL и SIGSTOP, которые ОС обрабатывает принудительно.