16.0 (Russian conspect)
Сигналы для нас довольно знакомы: Мы с ними имеем дело, когда управляем нашими процессами с клавиатуры. Например - Ctrl+С или Ctrl+\.
Помимо сигналов мы знаем ещё один способ межпроцессного взаимодействия - каналы. Для нас как для программистов канал - это просто файл.
Канал можно открыть дважды: на чтение и на запись.
Примерно вот так:
Сигнал - сообщение ассинхронно доставляемое программе (размнр - 1байт). Посылка сигнала - это системный вызов.
Для остановки программы можо использовать kill и идентификатор процесса (это тоже передача сигнала).
Также можно использовать kill -STOP идентификатор_процесса чтобы преостановить работу процесса. Далее можно будет использовать kill -CONT идентификатор чтобы продолжить работу процесса после его становки. Также существует -SIGKILL который удаляет процесс даже если он преостановлен.
Можно также перевести процесс из backgrount в foreground. С помощью команд bg и fg соответственно.
Чем отличается background процесс от foreground:
форграундный процесс всегда имеет право писать и читать в терманал на уотром он запущен, а бэкграундный только писать. Если бэкграундный процесс начинает читать его автоматически останавливает и если перевести его в fg то он продолжит работу.
Напишем программу killl:
В данную программу передаётся идентификатор процесса и номер сигнала. Она “убивает” полученный процесс.
Теперь напишем программу, котторая умеет обрабатывать два сигнала: SIGINT и SIGSEGV, а также параллельно выводит числа:
Мы получим следующий результат:
Напишем программу, которая будет выводитть числа с указанным промежутком, при этом обрабатывает сигналы.