Middle
107
questionbank
Какие сигналы существуют в операционной системе Linux?
Ответ от нейросети
sobes.tech AI
POSIX-совместимые сигналы:
SIGINT: Запрос прерывания от пользователя (Ctrl+C).SIGTERM: Запрос на завершение программы.SIGKILL: Безусловное завершение программы (нельзя перехватить).SIGQUIT: Запрос на завершение и дамп памяти (Ctrl+\).SIGHUP: Разрыв соединения с управляющим терминалом; перезапуск демона.SIGFPE: Арифметическая ошибка (деление на ноль).SIGSEGV: Нарушение сегментации (обращение к недействительной памяти).SIGBUS: Ошибка шины (неверный доступ к памяти).SIGILL: Недопустимая инструкция.SIGTRAP: Остановка при трассировке/отладке.SIGABRT: Аномальное завершение (например, вызовabort()).SIGUSR1,SIGUSR2: Пользовательские сигналы (для приложений).SIGSTOP: Остановка процесса (нельзя перехватить).SIGTSTP: Остановка процесса от терминала (Ctrl+Z).SIGCONT: Продолжить выполнение остановленного процесса.SIGCHLD: Изменение состояния дочернего процесса.SIGTTIN: Чтение из терминала фоновым процессом.SIGTTOU: Запись в терминал фоновым процессом.SIGPOLL(SIGIO): Доступность ввода/вывода на файловом дескрипторе.SIGPROF: Истечение интервала профилирования.SIGSYS: Ошибка при вызове системной функции.SIGURG: Экстренные данные доступны в сокете.SIGVTALRM: Истечение интервала виртуального таймера.SIGXCPU: Превышение лимита CPU.SIGXFSZ: Превышение лимита размера файла.
Сигналы реального времени: Начинаются с SIGRTMIN и заканчиваются SIGRTMAX. Используются для специфических задач планирования и коммуникации между процессами, их номера зависят от реализации.
Обработка сигналов в Python:
import signal
import os
import time
def handler(signum, frame):
# Обработчик сигнала
print(f"\nReceived signal: {signal.Signals(signum).name}")
if signum == signal.SIGTERM:
print("Terminating gracefully...")
# Здесь может быть код для чистого завершения работы
exit(0)
# Установка обработчика для SIGTERM и SIGINT
signal.signal(signal.SIGTERM, handler)
signal.signal(signal.SIGINT, handler)
print(f"My PID: {os.getpid()}")
print("Press Ctrl+C or send SIGTERM...")
while True:
# Программа работает
time.sleep(1)
print("Working...")
Отправка сигнала из командной строки:
# Отправить SIGTERM процессу с PID 12345
kill 12345
# Отправить SIGKILL процессу с PID 12345
kill -9 12345
# Отправить SIGINT (аналогично Ctrl+C)
# В другом окне терминала, если процесс запущен не в фоне
# kill -INT <PID>