16.0 (Russian conspect)

Сигналы для нас довольно знакомы: Мы с ними имеем дело, когда управляем нашими процессами с клавиатуры. Например - Ctrl+С или Ctrl+\.

Помимо сигналов мы знаем ещё один способ межпроцессного взаимодействия - каналы. Для нас как для программистов канал - это просто файл.

Канал можно открыть дважды: на чтение и на запись.

Примерно вот так:

1.jpg

Сигнал - сообщение ассинхронно доставляемое программе (размнр - 1байт). Посылка сигнала - это системный вызов.

Для остановки программы можо использовать kill и идентификатор процесса (это тоже передача сигнала).

Также можно использовать kill -STOP идентификатор_процесса чтобы преостановить работу процесса. Далее можно будет использовать kill -CONT идентификатор чтобы продолжить работу процесса после его становки. Также существует -SIGKILL который удаляет процесс даже если он преостановлен.

Можно также перевести процесс из backgrount в foreground. С помощью команд bg и fg соответственно.

Чем отличается background процесс от foreground:

форграундный процесс всегда имеет право писать и читать в терманал на уотром он запущен, а бэкграундный только писать. Если бэкграундный процесс начинает читать его автоматически останавливает и если перевести его в fg то он продолжит работу.

Напишем программу killl:

2.jpg

В данную программу передаётся идентификатор процесса и номер сигнала. Она “убивает” полученный процесс.

Теперь напишем программу, котторая умеет обрабатывать два сигнала: SIGINT и SIGSEGV, а также параллельно выводит числа:

3.jpg

Мы получим следующий результат:

4.jpg

Напишем программу, которая будет выводитть числа с указанным промежутком, при этом обрабатывает сигналы.

5.jpg

HSE/ProgrammingOS/16_IPC/Conspect (последним исправлял пользователь Lecture_Uploads 2020-06-08 23:50:15)